@luma.gl/test-utils 9.0.11 → 9.1.0-alpha.2

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.
Files changed (31) hide show
  1. package/LICENSE +34 -0
  2. package/dist/engine/classic-animation-loop.d.ts.map +1 -1
  3. package/dist/engine/classic-animation-loop.js +2 -1
  4. package/dist/index.cjs +29 -23
  5. package/dist/index.cjs.map +2 -2
  6. package/dist/null-device/null-canvas-context.d.ts +3 -1
  7. package/dist/null-device/null-canvas-context.d.ts.map +1 -1
  8. package/dist/null-device/null-canvas-context.js +2 -0
  9. package/dist/null-device/null-device.d.ts.map +1 -1
  10. package/dist/null-device/null-device.js +2 -2
  11. package/dist/null-device/resources/null-buffer.d.ts.map +1 -1
  12. package/dist/null-device/resources/null-buffer.js +3 -3
  13. package/dist/null-device/resources/null-framebuffer.d.ts +3 -0
  14. package/dist/null-device/resources/null-framebuffer.d.ts.map +1 -1
  15. package/dist/null-device/resources/null-framebuffer.js +2 -0
  16. package/dist/null-device/resources/null-render-pipeline.d.ts.map +1 -1
  17. package/dist/null-device/resources/null-render-pipeline.js +3 -3
  18. package/dist/null-device/resources/null-texture.d.ts +8 -6
  19. package/dist/null-device/resources/null-texture.d.ts.map +1 -1
  20. package/dist/null-device/resources/null-texture.js +24 -17
  21. package/dist/null-device/resources/null-vertex-array.d.ts +2 -1
  22. package/dist/null-device/resources/null-vertex-array.d.ts.map +1 -1
  23. package/package.json +9 -9
  24. package/src/engine/classic-animation-loop.ts +2 -8
  25. package/src/null-device/null-canvas-context.ts +4 -1
  26. package/src/null-device/null-device.ts +2 -2
  27. package/src/null-device/resources/null-buffer.ts +3 -3
  28. package/src/null-device/resources/null-framebuffer.ts +4 -0
  29. package/src/null-device/resources/null-render-pipeline.ts +3 -3
  30. package/src/null-device/resources/null-texture.ts +42 -21
  31. package/src/null-device/resources/null-vertex-array.ts +2 -1
package/LICENSE ADDED
@@ -0,0 +1,34 @@
1
+ luma.gl is provided under the MIT license
2
+
3
+ Copyright (c) 2020 vis.gl contributors
4
+
5
+ This software includes parts initially developed by Uber and open sourced under MIT license.
6
+ Copyright (c) 2015 Uber Technologies, Inc.
7
+
8
+ This software includes parts of PhiloGL (https://github.com/philogb/philogl)
9
+ under MIT license. PhiloGL parts Copyright © 2013 Sencha Labs.
10
+
11
+ This software includes adaptations of some postprocessing code from
12
+ THREE.js (https://github.com/mrdoob/three.js/) under MIT license.
13
+ THREE.js parts Copyright © 2010-2018 three.js authors.
14
+
15
+ Additional attribution given in specific source files.
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in
25
+ all copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
33
+ THE SOFTWARE.
34
+
@@ -1 +1 @@
1
- {"version":3,"file":"classic-animation-loop.d.ts","sourceRoot":"","sources":["../../src/engine/classic-animation-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classic-animation-loop.d.ts","sourceRoot":"","sources":["../../src/engine/classic-animation-loop.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  // TODO - replace createGLContext, instrumentGLContext, resizeGLContext?
5
5
  // TODO - remove dependency on framebuffer (bundle size impact)
6
- import { luma, log, requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/core';
6
+ import { luma, log } from '@luma.gl/core';
7
+ import { requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/engine';
7
8
  import { isBrowser } from '@probe.gl/env';
8
9
  import { resetGLParameters } from '@luma.gl/webgl';
9
10
  const isPage = isBrowser() && typeof document !== 'undefined';
package/dist/index.cjs CHANGED
@@ -95,6 +95,7 @@ async function getTestDevices(type) {
95
95
 
96
96
  // dist/engine/classic-animation-loop.js
97
97
  var import_core3 = require("@luma.gl/core");
98
+ var import_engine = require("@luma.gl/engine");
98
99
  var import_env = require("@probe.gl/env");
99
100
  var import_webgl3 = require("@luma.gl/webgl");
100
101
  var isPage = (0, import_env.isBrowser)() && typeof document !== "undefined";
@@ -353,13 +354,13 @@ var ClassicAnimationLoop = class {
353
354
  if (!this._running) {
354
355
  return;
355
356
  }
356
- this._animationFrameId = (0, import_core3.requestAnimationFrame)(this._animationFrame.bind(this));
357
+ this._animationFrameId = (0, import_engine.requestAnimationFrame)(this._animationFrame.bind(this));
357
358
  }
358
359
  _cancelAnimationFrame() {
359
360
  if (this._animationFrameId !== null) {
360
361
  return;
361
362
  }
362
- (0, import_core3.cancelAnimationFrame)(this._animationFrameId);
363
+ (0, import_engine.cancelAnimationFrame)(this._animationFrameId);
363
364
  this._animationFrameId = null;
364
365
  }
365
366
  _animationFrame() {
@@ -866,6 +867,8 @@ var import_core6 = require("@luma.gl/core");
866
867
  var import_core5 = require("@luma.gl/core");
867
868
  var NullFramebuffer = class extends import_core5.Framebuffer {
868
869
  device;
870
+ colorAttachments = [];
871
+ depthStencilAttachment = null;
869
872
  constructor(device, props) {
870
873
  super(device, props);
871
874
  this.device = device;
@@ -875,6 +878,8 @@ var NullFramebuffer = class extends import_core5.Framebuffer {
875
878
  // dist/null-device/null-canvas-context.js
876
879
  var NullCanvasContext = class extends import_core6.CanvasContext {
877
880
  device;
881
+ format = "rgba8unorm";
882
+ depthStencilFormat = "depth24plus";
878
883
  presentationSize;
879
884
  _framebuffer = null;
880
885
  constructor(device, props) {
@@ -922,7 +927,6 @@ var NullBuffer = class extends import_core7.Buffer {
922
927
  this.device = device;
923
928
  const byteOffset = props.byteOffset || 0;
924
929
  const byteLength = props.byteLength ?? (props.data ? props.data.byteLength + byteOffset : 0);
925
- (0, import_core7.assert)(byteLength >= 0);
926
930
  this.byteLength = byteLength;
927
931
  this.trackAllocatedMemory(byteLength);
928
932
  }
@@ -937,7 +941,6 @@ var NullBuffer = class extends import_core7.Buffer {
937
941
  return new Uint8Array(byteLength);
938
942
  }
939
943
  write(data, byteOffset = 0) {
940
- (0, import_core7.assert)(data.byteLength + byteOffset <= this.byteLength);
941
944
  }
942
945
  };
943
946
 
@@ -1017,7 +1020,7 @@ var NullTexture = class extends import_core12.Texture {
1017
1020
  super(device, props);
1018
1021
  this.device = device;
1019
1022
  if (typeof ((_a = this.props) == null ? void 0 : _a.data) === "string") {
1020
- Object.assign(this.props, { data: (0, import_core12.loadImage)(this.props.data) });
1023
+ throw new Error("Texture2D: Loading textures from URLs is not supported");
1021
1024
  }
1022
1025
  this.initialize(this.props);
1023
1026
  Object.seal(this);
@@ -1031,6 +1034,24 @@ var NullTexture = class extends import_core12.Texture {
1031
1034
  createView(props) {
1032
1035
  return new NullTextureView(this.device, { ...props, texture: this });
1033
1036
  }
1037
+ setTexture1DData(data) {
1038
+ throw new Error("not implemented");
1039
+ }
1040
+ setTexture2DData(lodData, depth, target) {
1041
+ throw new Error("not implemented");
1042
+ }
1043
+ setTexture3DData(lodData, depth, target) {
1044
+ throw new Error("not implemented");
1045
+ }
1046
+ setTextureCubeData(data, depth) {
1047
+ throw new Error("not implemented");
1048
+ }
1049
+ setTextureArrayData(data) {
1050
+ throw new Error("not implemented");
1051
+ }
1052
+ setTextureCubeArrayData(data) {
1053
+ throw new Error("not implemented");
1054
+ }
1034
1055
  initialize(props = {}) {
1035
1056
  const data = props.data;
1036
1057
  if (data instanceof Promise) {
@@ -1058,17 +1079,6 @@ var NullTexture = class extends import_core12.Texture {
1058
1079
  }
1059
1080
  return this;
1060
1081
  }
1061
- resize(options) {
1062
- const { height, width, mipmaps = false } = options;
1063
- if (width !== this.width || height !== this.height) {
1064
- return this.initialize({
1065
- width,
1066
- height,
1067
- mipmaps
1068
- });
1069
- }
1070
- return this;
1071
- }
1072
1082
  setImageData(options) {
1073
1083
  this.trackDeallocatedMemory("Texture");
1074
1084
  const { data } = options;
@@ -1085,10 +1095,6 @@ var NullTexture = class extends import_core12.Texture {
1085
1095
  return this;
1086
1096
  }
1087
1097
  setSubImageData(options) {
1088
- const { data, x = 0, y = 0 } = options;
1089
- const width = options.width ?? data.width;
1090
- const height = options.height ?? data.height;
1091
- (0, import_core12.assert)(width + x <= this.width && height + y <= this.height);
1092
1098
  }
1093
1099
  };
1094
1100
 
@@ -1127,8 +1133,8 @@ var NullRenderPipeline = class extends import_core14.RenderPipeline {
1127
1133
  constructor(device, props) {
1128
1134
  super(device, props);
1129
1135
  this.device = device;
1130
- this.vs = (0, import_core14.cast)(props.vs);
1131
- this.fs = (0, import_core14.cast)(props.fs);
1136
+ this.vs = props.vs;
1137
+ this.fs = props.fs;
1132
1138
  this.shaderLayout = props.shaderLayout || {
1133
1139
  attributes: [],
1134
1140
  bindings: [],
@@ -1241,7 +1247,7 @@ var _NullDevice = class extends import_core18.Device {
1241
1247
  return new _NullDevice(props);
1242
1248
  }
1243
1249
  constructor(props) {
1244
- super({ ...props, id: props.id || (0, import_core18.uid)("dummy-device") });
1250
+ super({ ...props, id: props.id || "null-device" });
1245
1251
  this.canvasContext = new NullCanvasContext(this, props);
1246
1252
  this.lost = new Promise((resolve) => {
1247
1253
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.js", "register-devices.js", "create-test-device.js", "engine/classic-animation-loop.js", "test-runner.js", "utils/get-bounding-box.js", "snapshot-test-runner.js", "performance-test-runner.js", "null-device/null-device.js", "null-device/null-device-info.js", "null-device/null-device-features.js", "null-device/null-canvas-context.js", "null-device/resources/null-framebuffer.js", "null-device/resources/null-buffer.js", "null-device/resources/null-shader.js", "null-device/resources/null-command-buffer.js", "null-device/resources/null-sampler.js", "null-device/resources/null-texture.js", "null-device/resources/null-texture-view.js", "null-device/resources/null-render-pass.js", "null-device/resources/null-render-pipeline.js", "null-device/resources/null-vertex-array.js", "null-device/resources/null-transform-feedback.js", "null-device/resources/null-query-set.js", "utils/check-type.js", "utils/deep-copy.js", "utils/resource-tracker.js"],
4
- "sourcesContent": ["import \"./register-devices.js\";\nexport { SnapshotTestRunner } from \"./snapshot-test-runner.js\";\nexport { PerformanceTestRunner } from \"./performance-test-runner.js\";\n// TEST DEVICES\nexport { webglDevice, webgpuDevice } from \"./create-test-device.js\";\nexport { getTestDevices } from \"./create-test-device.js\";\nexport { createTestDevice, createTestContext } from \"./create-test-device.js\";\nexport { NullDevice } from \"./null-device/null-device.js\";\n// UTILS\nexport { checkType } from \"./utils/check-type.js\";\nexport { deepCopy } from \"./utils/deep-copy.js\";\nexport { getResourceCounts, getLeakedResources } from \"./utils/resource-tracker.js\";\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma } from '@luma.gl/core';\nimport { WebGLDevice } from '@luma.gl/webgl';\nimport { WebGPUDevice } from '@luma.gl/webgpu';\nluma.registerDevices([WebGLDevice, WebGPUDevice]);\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma, log } from '@luma.gl/core';\nimport { WebGLDevice } from '@luma.gl/webgl';\nconst CONTEXT_DEFAULTS = {\n width: 1,\n height: 1,\n debug: true\n};\n/** Create a test WebGL context */\nexport function createTestContext(opts = {}) {\n const device = createTestDevice(opts);\n return device && device.gl;\n}\n/** Create a test WebGLDevice */\nexport function createTestDevice(props = {}) {\n try {\n props = { ...CONTEXT_DEFAULTS, ...props, debug: true };\n // We dont use luma.createDevice since this tests current expect this context to be created synchronously\n return new WebGLDevice(props);\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to created device '${props.id}': ${error.message}`);\n return null;\n }\n}\n/** This WebGL Device can be used directly but will not have WebGL debugging initialized */\nexport const webglDevice = createTestDevice();\n/** A WebGL 2 Device intended for testing - @note Only available after getTestDevices() has completed */\nexport let webglDeviceAsync;\n/** A WebGL 2 Device intended for testing - @note Only available after getTestDevices() has completed */\nexport let webgpuDevice;\nlet devicesCreated = false;\n/** Includes WebGPU device if available */\nexport async function getTestDevices(type) {\n if (!devicesCreated) {\n devicesCreated = true;\n try {\n webgpuDevice = (await luma.createDevice({\n id: 'webgpu-test-device',\n type: 'webgpu'\n }));\n }\n catch (error) {\n log.error(String(error))();\n }\n try {\n webglDeviceAsync = (await luma.createDevice({\n id: 'webgl-test-device',\n type: 'webgl'\n }));\n }\n catch (error) {\n log.error(String(error))();\n }\n }\n return [webglDeviceAsync, webgpuDevice]\n .filter(Boolean)\n .filter(device => !type || type === device.type);\n}\n", "// luma.gl\n// SPDX-License\n// Copyright (c) vis.gl contributors\n// TODO - replace createGLContext, instrumentGLContext, resizeGLContext?\n// TODO - remove dependency on framebuffer (bundle size impact)\nimport { luma, log, requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/core';\nimport { isBrowser } from '@probe.gl/env';\nimport { resetGLParameters } from '@luma.gl/webgl';\nconst isPage = isBrowser() && typeof document !== 'undefined';\nfunction getHTMLCanvasElement(canvas) {\n return typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement\n ? canvas\n : null;\n}\nlet statIdCounter = 0;\nconst DEFAULT_CLASSIC_ANIMATION_LOOP_PROPS = {\n onCreateDevice: (props) => luma.createDevice(props),\n onCreateContext: undefined,\n onAddHTML: undefined,\n onInitialize: () => ({}),\n onRender: () => { },\n onFinalize: () => { },\n onError: error => console.error(error), // eslint-disable-line no-console\n device: null,\n // debug: true,\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: true,\n autoResizeDrawingBuffer: true,\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n // deprecated\n // onCreateContext: (opts) => createGLContext(opts),\n gl: undefined,\n glOptions: {},\n createFramebuffer: false\n};\n/**\n * Convenient animation loop\n * @deprecated Use `@luma.gl/engine` AnimationLoop\n */\nexport class ClassicAnimationLoop {\n device;\n canvas;\n props;\n animationProps;\n // framebuffer: ClassicFramebuffer = null;\n timeline = null;\n stats;\n cpuTime;\n gpuTime;\n frameRate;\n display;\n needsRedraw = 'initialized';\n _initialized = false;\n _running = false;\n _animationFrameId = null;\n _pageLoadPromise = null;\n _nextFramePromise = null;\n _resolveNextFrame = null;\n _cpuStartTime = 0;\n // _gpuTimeQuery: Query | null = null;\n /** @deprecated */\n gl;\n /*\n */\n constructor(props = {}) {\n this.props = { ...DEFAULT_CLASSIC_ANIMATION_LOOP_PROPS, ...props };\n props = this.props;\n let { useDevicePixels = true } = this.props;\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-expect-error\n useDevicePixels = props.useDevicePixelRatio;\n }\n // state\n this.device = props.device;\n // @ts-expect-error\n this.gl = (this.device && this.device.gl) || props.gl;\n this.stats = props.stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n destroy() {\n this.stop();\n this._setDisplay(null);\n }\n /** @deprecated Use .destroy() */\n delete() {\n this.destroy();\n }\n setNeedsRedraw(reason) {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n start(opts = {}) {\n this._start(opts);\n return this;\n }\n /** Starts a render loop if not already running */\n async _start(props) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n try {\n await this._getPageLoadPromise();\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._createDevice(props);\n this._initialize(props);\n // Note: onIntialize can return a promise (in case app needs to load resources)\n // eslint-disable-next-line @typescript-eslint/await-thenable\n appContext = await this.onInitialize(this.animationProps);\n this._addCallbackData(appContext || {});\n }\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n return this;\n }\n catch (error) {\n this.props.onError(error);\n // this._running = false; // TODO\n return null;\n }\n }\n /** Explicitly draw a frame */\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n this._beginTimers();\n this._setupFrame();\n this._updateCallbackData();\n this._renderFrame(this.animationProps);\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n this._endTimers();\n return this;\n }\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n attachTimeline(timeline) {\n this.timeline = timeline;\n return this.timeline;\n }\n detachTimeline() {\n this.timeline = null;\n }\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n return getHTMLCanvasElement(this.gl.canvas)?.toDataURL();\n }\n isContextLost() {\n return this.gl.isContextLost();\n }\n onCreateDevice(deviceProps) {\n const { onCreateDevice } = this.props;\n return onCreateDevice(deviceProps);\n }\n onInitialize(animationProps) {\n const { onInitialize } = this.props;\n return onInitialize(animationProps);\n }\n onRender(animationProps) {\n const { onRender } = this.props;\n return onRender(animationProps);\n }\n onFinalize(animationProps) {\n const { onFinalize } = this.props;\n return onFinalize(animationProps);\n }\n // DEPRECATED/REMOVED METHODS\n /** @deprecated Use .onCreateDevice() */\n onCreateContext(props) {\n const { onCreateContext } = this.props;\n return onCreateContext(props);\n }\n /** @deprecated */\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-expect-error Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n // PRIVATE METHODS\n _initialize(props) {\n this._createFramebuffer();\n this._startEventHandling();\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n _setDisplay(display) {\n if (this.display) {\n this.display.destroy();\n this.display.animationLoop = null;\n }\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n this.display = display;\n }\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n _cancelAnimationFrame() {\n if (this._animationFrameId !== null) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(props) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(props);\n return;\n }\n // call callback\n this.onRender(props);\n // end callback\n }\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n /* eslint-disable @typescript-eslint/unbound-method */\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n this.animationProps = {\n device: this.device,\n gl: this.gl,\n stop: this.stop,\n canvas: this.gl.canvas,\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: null,\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n timeline: this.timeline,\n // @ts-ignore\n animationLoop: this,\n // Timeline time for back compatibility\n time: 0,\n // Experimental\n _mousePosition: null, // Event props\n /** @deprecated */\n // framebuffer: this.framebuffer,\n /** @deprecated */\n _timeline: this.timeline,\n /** @deprecated */\n _loop: this,\n /** @deprecated */\n _animationLoop: this\n };\n }\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const { width, height, aspect } = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n this.animationProps.needsRedraw = this.needsRedraw;\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n /** Add application's data to the app context object */\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n /** Either uses supplied or existing context, or calls provided callback to create one */\n async _createDevice(props) {\n const deviceProps = { ...this.props, ...props, ...this.props.glOptions };\n // TODO - support this.onCreateContext\n // Create the WebGL context if necessary\n // this.gl = this.props.gl ? instrumentGLContext(this.props.gl, deviceProps) : this.onCreateContext(deviceProps);\n this.device = await this.onCreateDevice(deviceProps);\n // @ts-expect-error\n this.gl = this.device.gl;\n // Reset the WebGL context.\n resetGLParameters(this.gl);\n this._createInfoDiv();\n }\n _createInfoDiv() {\n const canvas = getHTMLCanvasElement(this.gl.canvas);\n if (canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (canvas) {\n wrapperDiv.appendChild(canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = getHTMLCanvasElement(this.gl.canvas);\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n }\n else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n return { width, height, aspect };\n }\n /** Default viewport setup */\n _resizeViewport() {\n if (this.props.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n /**\n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n this.device.canvasContext.resize({ useDevicePixels: this.props.useDevicePixels });\n }\n }\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n this.cpuTime.timeStart();\n }\n _endTimers() {\n this.cpuTime.timeEnd();\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n // Event handling\n _startEventHandling() {\n const { canvas } = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n // Deprecated\n /** @deprecated */\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n // this.framebuffer = new ClassicFramebuffer(this.gl);\n }\n }\n /** @deprecated */\n _resizeFramebuffer() {\n // if (this.framebuffer) {\n // this.framebuffer.resize({\n // width: this.gl.drawingBufferWidth,\n // height: this.gl.drawingBufferHeight\n // });\n // }\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { webglDevice } from \"./create-test-device.js\";\n// TODO - Replace with new AnimationLoop from `@luma.gl/engine`\nimport { ClassicAnimationLoop as AnimationLoop } from \"./engine/classic-animation-loop.js\";\nconst DEFAULT_TEST_CASE = {\n name: 'Unnamed test',\n onInitialize: async () => { },\n onRender: ({ done }) => done(),\n onFinalize: () => { }\n};\nconst DEFAULT_TEST_PROPS = {\n width: undefined,\n height: undefined,\n // test lifecycle callback\n onTestStart: (testCase) => console.log(`# ${testCase.name}`),\n onTestPass: (testCase, result) => console.log(`ok ${testCase.name} passed`),\n onTestFail: (testCase, error) => console.log(`not ok ${testCase.name} failed`),\n // milliseconds to wait for each test case before aborting\n timeout: 2000,\n maxFramesToRender: undefined,\n imageDiffOptions: undefined\n};\n/** Runs an array of test cases */\nexport class TestRunner {\n device = webglDevice;\n props;\n isRunning = false;\n testOptions = { ...DEFAULT_TEST_PROPS };\n _animationProps;\n _animationLoop;\n _testCases = [];\n _testCaseData = null;\n _currentTestCase;\n _currentTestCaseStartTime;\n _currentTestCaseStartTick;\n // should be defined in snapshot-test-runner\n isDiffing = false;\n // @ts-expect-error\n isHeadless = Boolean(window.browserTestDriver_isHeadless);\n /**\n * props\n * AnimationLoop props\n */\n constructor(props = {}) {\n this.props = props;\n }\n /**\n * Add testCase(s)\n */\n add(testCases) {\n if (!Array.isArray(testCases)) {\n testCases = [testCases];\n }\n for (const testCase of testCases) {\n this._testCases.push(testCase);\n }\n return this;\n }\n /**\n * Returns a promise that resolves when all the test cases are done\n */\n run(options = {}) {\n this.testOptions = { ...this.testOptions, ...options };\n return new Promise((resolve, reject) => {\n this._animationLoop = new AnimationLoop({\n ...this.props,\n device: this.device,\n onRender: this._onRender.bind(this),\n onFinalize: () => {\n this.isRunning = false;\n resolve();\n }\n });\n this._animationLoop.start(this.props);\n this.isRunning = true;\n this.isDiffing = false;\n this._currentTestCase = null;\n }).catch(error => {\n this._fail({ error: error.message });\n // reject(error);\n });\n }\n /* Lifecycle methods for subclassing */\n initTestCase(testCase) {\n const { animationLoop } = testCase;\n if (animationLoop) {\n testCase.onInitialize = animationLoop.props.onInitialize.bind(animationLoop);\n testCase.onRender = animationLoop.props.onRender.bind(animationLoop);\n testCase.onFinalize = animationLoop.props.onFinalize.bind(animationLoop);\n }\n for (const key in DEFAULT_TEST_CASE) {\n testCase[key] = testCase[key] || DEFAULT_TEST_CASE[key];\n }\n }\n shouldRender(animationProps) {\n return true;\n }\n assert(testCase) {\n this._pass(testCase);\n this._next();\n }\n /* Utilities */\n _pass(result) {\n this.testOptions.onTestPass(this._currentTestCase, result);\n // this._animationLoop?.stop();\n }\n _fail(result) {\n this.testOptions.onTestFail(this._currentTestCase, result);\n // this._animationLoop?.stop();\n }\n _next() {\n this._nextTestCase();\n }\n /* Private methods */\n _onRender(animationProps) {\n this._animationProps = animationProps;\n const testCase = this._currentTestCase || this._nextTestCase();\n if (!testCase) {\n // all test cases are done\n this._animationLoop.stop();\n return;\n }\n let isDone = false;\n const testCaseAnimationProps = {\n ...animationProps,\n ...this._testCaseData,\n // tick/time starts from 0 for each test case\n startTime: this._currentTestCaseStartTime,\n time: animationProps.time - this._currentTestCaseStartTime,\n tick: animationProps.tick - this._currentTestCaseStartTick,\n // called by the test case when it is done rendering and ready for capture and diff\n done: () => {\n isDone = true;\n }\n };\n if (this._testCaseData && this.shouldRender(testCaseAnimationProps)) {\n // try {\n // test case is initialized, render frame\n testCase.onRender(testCaseAnimationProps);\n // } catch {\n // isDone = true;\n // }\n }\n const timeout = testCase.timeout || this.testOptions.timeout;\n if (timeout && testCaseAnimationProps.time > timeout) {\n isDone = true;\n }\n if (isDone) {\n this.assert(testCase);\n }\n }\n _nextTestCase() {\n const animationProps = this._animationProps;\n // finalize the current test case\n if (this._testCaseData) {\n for (const key in this._testCaseData) {\n const value = this._testCaseData[key];\n if (value && value.delete) {\n value.destroy();\n }\n }\n this._currentTestCase.onFinalize(Object.assign({}, animationProps, this._testCaseData));\n // reset WebGL context\n this.device.popState();\n this._currentTestCase = null;\n this._testCaseData = null;\n }\n // get the next test case\n const testCase = this._testCases.shift();\n if (testCase) {\n // start new test case\n this._currentTestCase = testCase;\n this._currentTestCaseStartTime = animationProps.time;\n this._currentTestCaseStartTick = animationProps.tick;\n this.initTestCase(testCase);\n // initialize test case\n // save WebGL context\n this.device.pushState();\n // aligned with the behavior of AnimationLoop.onInitialized\n // onInitialized could return a plain object or a promise\n const initProps = {\n ...animationProps,\n // tick/time starts from 0 for each test case\n startTime: animationProps.time,\n time: 0,\n tick: 0\n };\n // aligned with the behavior of AnimationLoop.onInitialized\n // onInitialized could return a plain object or a promise\n Promise.resolve(testCase.onInitialize(initProps)).then(userData => {\n this._testCaseData = userData || {};\n });\n // invoke user callback\n this.testOptions.onTestStart(testCase);\n }\n return testCase;\n }\n}\n", "// Get the bounding box of a DOMElement relative to the page\nexport function getBoundingBoxInPage(domElement) {\n const bbox = domElement.getBoundingClientRect();\n return {\n x: window.scrollX + bbox.x,\n y: window.scrollY + bbox.y,\n width: bbox.width,\n height: bbox.height\n };\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TestRunner } from \"./test-runner.js\";\nimport { getBoundingBoxInPage } from \"./utils/get-bounding-box.js\";\nexport class SnapshotTestRunner extends TestRunner {\n // should be defined here but hack access in TestRunner\n // private isDiffing: boolean = false;\n constructor(props) {\n super(props);\n this.testOptions.imageDiffOptions = {};\n }\n initTestCase(testCase) {\n super.initTestCase(testCase);\n if (!testCase.goldenImage) {\n throw new Error(`Test case ${testCase.name} does not have golden image`);\n }\n }\n shouldRender() {\n // wait for the current diffing to finish\n return !this.isDiffing;\n }\n async assert(testCase) {\n if (this.isDiffing) {\n // Already performing diffing\n return;\n }\n this.isDiffing = true;\n const canvas = this._animationProps?.canvas;\n if (!(canvas instanceof HTMLCanvasElement)) {\n throw new Error('canvas');\n }\n const diffOptions = {\n ...this.testOptions.imageDiffOptions,\n ...testCase.imageDiffOptions,\n goldenImage: testCase.goldenImage,\n region: getBoundingBoxInPage(canvas)\n };\n // Take screenshot and compare\n const result = await globalThis.browserTestDriver_captureAndDiffScreen(diffOptions);\n // invoke user callback\n if (result.success) {\n this._pass(result);\n }\n else {\n this._fail(result);\n }\n this.isDiffing = false;\n this._next();\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Stats } from '@probe.gl/stats';\nimport { TestRunner } from \"./test-runner.js\";\nexport class PerformanceTestRunner extends TestRunner {\n _stats = null;\n _fps = null;\n constructor(props) {\n super(props);\n Object.assign(this.testOptions, {\n maxFramesToRender: 60,\n targetFPS: 50\n });\n }\n initTestCase(testCase) {\n super.initTestCase(testCase);\n this._stats = new Stats({ id: testCase.name });\n this._fps = this._stats.get('fps');\n }\n shouldRender(animationProps) {\n this._fps?.timeEnd();\n this._fps?.timeStart();\n if (this._fps.count > this.testOptions.maxFramesToRender) {\n animationProps.done();\n }\n return true;\n }\n assert(testCase) {\n // @ts-expect-error\n const targetFPS = testCase.targetFPS || this.testOptions.targetFPS;\n const count = this._fps?.count;\n const fps = this._fps?.getHz() || 0;\n if (fps >= targetFPS) {\n this._pass({ fps, framesRendered: count });\n }\n else {\n this._fail({ fps, framesRendered: count });\n }\n this._next();\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Device, CanvasContext, uid, DeviceFeatures } from '@luma.gl/core';\nimport { NullDeviceInfo } from \"./null-device-info.js\";\nimport { NullDeviceLimits } from \"./null-device-features.js\";\nimport { NullCanvasContext } from \"./null-canvas-context.js\";\nimport { NullBuffer } from \"./resources/null-buffer.js\";\nimport { NullFramebuffer } from \"./resources/null-framebuffer.js\";\nimport { NullShader } from \"./resources/null-shader.js\";\nimport { NullCommandEncoder } from \"./resources/null-command-buffer.js\";\nimport { NullSampler } from \"./resources/null-sampler.js\";\nimport { NullTexture } from \"./resources/null-texture.js\";\nimport { NullRenderPass } from \"./resources/null-render-pass.js\";\nimport { NullRenderPipeline } from \"./resources/null-render-pipeline.js\";\nimport { NullVertexArray } from \"./resources/null-vertex-array.js\";\nimport { NullTransformFeedback } from \"./resources/null-transform-feedback.js\";\nimport { NullQuerySet } from \"./resources/null-query-set.js\";\n/** Do-nothing device implementation for testing */\nexport class NullDevice extends Device {\n static isSupported() {\n return true;\n }\n static type = 'unknown';\n type = 'unknown';\n features = new DeviceFeatures([], this.props.disabledFeatures);\n limits = new NullDeviceLimits();\n info = NullDeviceInfo;\n canvasContext;\n lost;\n static attach(handle) {\n return new NullDevice({});\n }\n static async create(props = {}) {\n // Wait for page to load: if canvas is a string we need to query the DOM for the canvas element.\n // We only wait when props.canvas is string to avoids setting the global page onload callback unless necessary.\n if (typeof props.canvas === 'string') {\n await CanvasContext.pageLoaded;\n }\n return new NullDevice(props);\n }\n constructor(props) {\n super({ ...props, id: props.id || uid('dummy-device') });\n this.canvasContext = new NullCanvasContext(this, props);\n this.lost = new Promise(resolve => { });\n this.canvasContext.resize();\n }\n /**\n * Destroys the context\n * @note Has no effect for WebGL browser contexts, there is no browser API for destroying contexts\n */\n destroy() { }\n get isLost() {\n return false;\n }\n getSize() {\n return [this.canvasContext.width, this.canvasContext.height];\n }\n isTextureFormatSupported(format) {\n return true;\n }\n isTextureFormatFilterable(format) {\n return true;\n }\n isTextureFormatRenderable(format) {\n return true;\n }\n // IMPLEMENTATION OF ABSTRACT DEVICE\n createCanvasContext(props) {\n return new NullCanvasContext(this, props);\n }\n createBuffer(props) {\n const newProps = this._getBufferProps(props);\n return new NullBuffer(this, newProps);\n }\n getDefaultRenderPass() {\n return new NullRenderPass(this, {});\n }\n _createTexture(props) {\n return new NullTexture(this, props);\n }\n createExternalTexture(props) {\n throw new Error('createExternalTexture() not implemented'); // return new Program(props);\n }\n createSampler(props) {\n return new NullSampler(this, props);\n }\n createShader(props) {\n return new NullShader(this, props);\n }\n createFramebuffer(props) {\n return new NullFramebuffer(this, props);\n }\n createVertexArray(props) {\n return new NullVertexArray(this, props);\n }\n createTransformFeedback(props) {\n return new NullTransformFeedback(this, props);\n }\n createQuerySet(props) {\n return new NullQuerySet(this, props);\n }\n createRenderPipeline(props) {\n return new NullRenderPipeline(this, props);\n }\n beginRenderPass(props) {\n return new NullRenderPass(this, props);\n }\n createComputePipeline(props) {\n throw new Error('ComputePipeline not supported in WebGL');\n }\n beginComputePass(props) {\n throw new Error('ComputePass not supported in WebGL');\n }\n createCommandEncoder(props = {}) {\n return new NullCommandEncoder(this, props);\n }\n submit() { }\n setParametersWebGL(parameters) { }\n getParametersWebGL(parameters) { }\n withParametersWebGL(parameters, func) {\n const { nocatch = true } = parameters;\n let value;\n if (nocatch) {\n // Avoid try catch to minimize stack size impact for safe execution paths\n return func();\n }\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n try {\n value = func();\n }\n catch {\n // ignore\n }\n return value;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const NullDeviceInfo = {\n type: 'unknown',\n gpu: 'software',\n gpuType: 'unknown',\n gpuBackend: 'unknown',\n vendor: 'no one',\n renderer: 'none',\n version: '1.0',\n shadingLanguage: 'glsl',\n shadingLanguageVersion: 300\n};\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { DeviceLimits } from '@luma.gl/core';\nexport class NullDeviceLimits extends DeviceLimits {\n maxTextureDimension1D = 0;\n maxTextureDimension2D = 2048;\n maxTextureDimension3D = 256;\n maxTextureArrayLayers = 256;\n maxBindGroups = 0;\n maxDynamicUniformBuffersPerPipelineLayout = 0;\n maxDynamicStorageBuffersPerPipelineLayout = 0;\n maxSampledTexturesPerShaderStage = 8;\n maxSamplersPerShaderStage = 16;\n maxStorageBuffersPerShaderStage = 0;\n maxStorageTexturesPerShaderStage = 0;\n maxUniformBuffersPerShaderStage = 20;\n maxUniformBufferBindingSize = 16384;\n maxStorageBufferBindingSize = 0;\n minUniformBufferOffsetAlignment = 0;\n minStorageBufferOffsetAlignment = 0;\n maxVertexBuffers = 16;\n maxVertexAttributes = 16;\n maxVertexBufferArrayStride = 2048;\n maxInterStageShaderComponents = 60;\n maxComputeWorkgroupStorageSize = 0;\n maxComputeInvocationsPerWorkgroup = 0;\n maxComputeWorkgroupSizeX = 0;\n maxComputeWorkgroupSizeY = 0;\n maxComputeWorkgroupSizeZ = 0;\n maxComputeWorkgroupsPerDimension = 0;\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CanvasContext } from '@luma.gl/core';\nimport { NullFramebuffer } from \"./resources/null-framebuffer.js\";\n/**\n * A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc\n */\nexport class NullCanvasContext extends CanvasContext {\n device;\n presentationSize;\n _framebuffer = null;\n constructor(device, props) {\n // Note: Base class creates / looks up the canvas (unless under Node.js)\n super(props);\n this.device = device;\n this.presentationSize = [-1, -1];\n this._setAutoCreatedCanvasId(`${this.device.id}-canvas`);\n this.update();\n }\n getCurrentFramebuffer() {\n this.update();\n // Setting handle to null returns a reference to the default framebuffer\n this._framebuffer = this._framebuffer || new NullFramebuffer(this.device, { handle: null });\n return this._framebuffer;\n }\n /** Resizes and updates render targets if necessary */\n update() {\n const size = this.getPixelSize();\n const sizeChanged = size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];\n if (sizeChanged) {\n this.presentationSize = size;\n this.resize();\n }\n }\n resize(options) {\n if (this.canvas) {\n const devicePixelRatio = this.getDevicePixelRatio(options?.useDevicePixels);\n this.setDevicePixelRatio(devicePixelRatio, options);\n return;\n }\n }\n getDrawingBufferSize() {\n return [this.width, this.height];\n }\n commit() { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Framebuffer } from '@luma.gl/core';\nexport class NullFramebuffer extends Framebuffer {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer, assert } from '@luma.gl/core';\nexport class NullBuffer extends Buffer {\n device;\n byteLength;\n constructor(device, props = {}) {\n super(device, props);\n this.device = device;\n const byteOffset = props.byteOffset || 0;\n const byteLength = props.byteLength ?? (props.data ? props.data.byteLength + byteOffset : 0);\n assert(byteLength >= 0);\n this.byteLength = byteLength;\n this.trackAllocatedMemory(byteLength);\n }\n destroy() {\n if (!this.destroyed) {\n super.destroy();\n this.trackDeallocatedMemory();\n }\n }\n async readAsync(byteOffset = 0, byteLength) {\n byteLength = byteLength ?? this.byteLength - byteOffset;\n return new Uint8Array(byteLength);\n }\n write(data, byteOffset = 0) {\n assert(data.byteLength + byteOffset <= this.byteLength);\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Shader } from '@luma.gl/core';\nexport class NullShader extends Shader {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n async getCompilationInfo() {\n return [];\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CommandEncoder } from '@luma.gl/core';\nexport class NullCommandEncoder extends CommandEncoder {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n finish() { }\n copyBufferToBuffer(options) { }\n copyBufferToTexture(options) { }\n copyTextureToBuffer(options) { }\n copyTextureToTexture(options) { }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n resolveQuerySet(querySet) { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Sampler } from '@luma.gl/core';\nexport class NullSampler extends Sampler {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Texture, assert, loadImage } from '@luma.gl/core';\nimport { NullSampler } from \"./null-sampler.js\";\nimport { NullTextureView } from \"./null-texture-view.js\";\nexport class NullTexture extends Texture {\n device;\n sampler;\n view;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n // Signature: new Texture2D(gl, {data: url})\n if (typeof this.props?.data === 'string') {\n Object.assign(this.props, { data: loadImage(this.props.data) });\n }\n this.initialize(this.props);\n Object.seal(this);\n }\n destroy() {\n if (!this.destroyed) {\n super.destroy();\n this.trackDeallocatedMemory('Texture');\n }\n }\n createView(props) {\n return new NullTextureView(this.device, { ...props, texture: this });\n }\n initialize(props = {}) {\n const data = props.data;\n if (data instanceof Promise) {\n data.then(resolvedImageData => this.initialize(Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })));\n return this;\n }\n this.setImageData(props);\n this.setSampler(props.sampler);\n this.view = new NullTextureView(this.device, {\n ...props,\n texture: this,\n mipLevelCount: 1,\n arrayLayerCount: 1\n });\n return this;\n }\n setSampler(sampler = {}) {\n if (sampler instanceof NullSampler) {\n this.sampler = sampler;\n }\n else {\n this.sampler = new NullSampler(this.device, sampler);\n }\n return this;\n }\n resize(options) {\n const { height, width, mipmaps = false } = options;\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n mipmaps\n });\n }\n return this;\n }\n setImageData(options) {\n this.trackDeallocatedMemory('Texture');\n const { data } = options;\n if (data && data.byteLength) {\n this.trackAllocatedMemory(data.byteLength, 'Texture');\n }\n else {\n const bytesPerPixel = 4;\n this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');\n }\n const width = options.width ?? data.width;\n const height = options.height ?? data.height;\n this.width = width;\n this.height = height;\n return this;\n }\n setSubImageData(options) {\n const { data, x = 0, y = 0 } = options;\n const width = options.width ?? data.width;\n const height = options.height ?? data.height;\n assert(width + x <= this.width && height + y <= this.height);\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TextureView, Texture } from '@luma.gl/core';\nexport class NullTextureView extends TextureView {\n device;\n texture;\n constructor(device, props) {\n super(device, { ...Texture.defaultProps, ...props });\n this.device = device;\n this.texture = props.texture;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPass } from '@luma.gl/core';\nexport class NullRenderPass extends RenderPass {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n end() { }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n setParameters(parameters = {}) { }\n beginOcclusionQuery(queryIndex) { }\n endOcclusionQuery() { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPipeline, cast } from '@luma.gl/core';\n/** Creates a new render pipeline */\nexport class NullRenderPipeline extends RenderPipeline {\n device;\n vs;\n fs;\n uniforms = {};\n bindings = {};\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.vs = cast(props.vs);\n this.fs = cast(props.fs);\n this.shaderLayout = props.shaderLayout || {\n attributes: [],\n bindings: [],\n uniforms: []\n };\n }\n setBindings(bindings) {\n Object.assign(this.bindings, bindings);\n }\n setUniformsWebGL(uniforms) {\n Object.assign(this.uniforms, uniforms);\n }\n draw(options) {\n const { renderPass, vertexArray } = options;\n vertexArray.bindBeforeRender(renderPass);\n vertexArray.unbindAfterRender(renderPass);\n return true;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VertexArray } from '@luma.gl/core';\nexport class NullVertexArray extends VertexArray {\n device;\n // Create a VertexArray\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n setIndexBuffer(indexBuffer) {\n this.indexBuffer = indexBuffer;\n }\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, attributeBuffer) {\n const attributeInfo = this.attributeInfos[location];\n if (!attributeInfo) {\n throw new Error(`Unknown attribute location ${location}`);\n }\n this.attributes[location] = attributeBuffer;\n }\n bindBeforeRender() { }\n unbindAfterRender() { }\n setConstantWebGL(location, value) { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TransformFeedback } from '@luma.gl/core';\nexport class NullTransformFeedback extends TransformFeedback {\n device;\n layout;\n buffers = {};\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.layout = this.props.layout;\n if (props.buffers) {\n this.setBuffers(props.buffers);\n }\n Object.seal(this);\n }\n begin(topology = 'point-list') { }\n end() { }\n setBuffers(buffers) {\n this.buffers = {};\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n }\n setBuffer(locationOrName, bufferOrRange) {\n this.buffers[locationOrName] = bufferOrRange;\n }\n getBuffer(locationOrName) {\n return this.buffers[locationOrName] || null;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { QuerySet } from '@luma.gl/core';\nexport class NullQuerySet extends QuerySet {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "/**\n * Tests that an argument matches the type.\n * @note fails during typescript type check, not during runtime.\n */\nexport function checkType(value) { }\n", "/** Recursively copies objects */\nexport function deepCopy(object) {\n if (Array.isArray(object)) {\n return object.map(element => deepCopy(element));\n }\n if (object !== null && typeof object === 'object') {\n const newObject = {};\n for (const key in object) {\n newObject[key] = deepCopy(object[key]);\n }\n return newObject;\n }\n return object;\n}\n", "/* global luma */\nexport function getResourceCounts() {\n // @ts-ignore\n const resourceStats = luma.stats.get('Resource Counts');\n return {\n Texture2D: resourceStats.get('Texture2Ds Active').count,\n Buffer: resourceStats.get('Buffers Active').count\n };\n}\nexport function getLeakedResources(startCounts, endCounts) {\n let leakedResources = null;\n const info = 'leaking: ';\n for (const resourceName in endCounts) {\n const leakCount = endCounts[resourceName] - startCounts[resourceName];\n if (leakCount !== 0) {\n leakedResources = Object.assign({}, leakedResources, {\n [resourceName]: leakCount,\n info: `${info} ${resourceName}: ${leakCount}, `\n });\n }\n }\n return leakedResources;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import \"./register-devices.js\";\nexport { SnapshotTestRunner } from \"./snapshot-test-runner.js\";\nexport { PerformanceTestRunner } from \"./performance-test-runner.js\";\n// TEST DEVICES\nexport { webglDevice, webgpuDevice } from \"./create-test-device.js\";\nexport { getTestDevices } from \"./create-test-device.js\";\nexport { createTestDevice, createTestContext } from \"./create-test-device.js\";\nexport { NullDevice } from \"./null-device/null-device.js\";\n// UTILS\nexport { checkType } from \"./utils/check-type.js\";\nexport { deepCopy } from \"./utils/deep-copy.js\";\nexport { getResourceCounts, getLeakedResources } from \"./utils/resource-tracker.js\";\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma } from '@luma.gl/core';\nimport { WebGLDevice } from '@luma.gl/webgl';\nimport { WebGPUDevice } from '@luma.gl/webgpu';\nluma.registerDevices([WebGLDevice, WebGPUDevice]);\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma, log } from '@luma.gl/core';\nimport { WebGLDevice } from '@luma.gl/webgl';\nconst CONTEXT_DEFAULTS = {\n width: 1,\n height: 1,\n debug: true\n};\n/** Create a test WebGL context */\nexport function createTestContext(opts = {}) {\n const device = createTestDevice(opts);\n return device && device.gl;\n}\n/** Create a test WebGLDevice */\nexport function createTestDevice(props = {}) {\n try {\n props = { ...CONTEXT_DEFAULTS, ...props, debug: true };\n // We dont use luma.createDevice since this tests current expect this context to be created synchronously\n return new WebGLDevice(props);\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to created device '${props.id}': ${error.message}`);\n return null;\n }\n}\n/** This WebGL Device can be used directly but will not have WebGL debugging initialized */\nexport const webglDevice = createTestDevice();\n/** A WebGL 2 Device intended for testing - @note Only available after getTestDevices() has completed */\nexport let webglDeviceAsync;\n/** A WebGL 2 Device intended for testing - @note Only available after getTestDevices() has completed */\nexport let webgpuDevice;\nlet devicesCreated = false;\n/** Includes WebGPU device if available */\nexport async function getTestDevices(type) {\n if (!devicesCreated) {\n devicesCreated = true;\n try {\n webgpuDevice = (await luma.createDevice({\n id: 'webgpu-test-device',\n type: 'webgpu'\n }));\n }\n catch (error) {\n log.error(String(error))();\n }\n try {\n webglDeviceAsync = (await luma.createDevice({\n id: 'webgl-test-device',\n type: 'webgl'\n }));\n }\n catch (error) {\n log.error(String(error))();\n }\n }\n return [webglDeviceAsync, webgpuDevice]\n .filter(Boolean)\n .filter(device => !type || type === device.type);\n}\n", "// luma.gl\n// SPDX-License\n// Copyright (c) vis.gl contributors\n// TODO - replace createGLContext, instrumentGLContext, resizeGLContext?\n// TODO - remove dependency on framebuffer (bundle size impact)\nimport { luma, log } from '@luma.gl/core';\nimport { requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/engine';\nimport { isBrowser } from '@probe.gl/env';\nimport { resetGLParameters } from '@luma.gl/webgl';\nconst isPage = isBrowser() && typeof document !== 'undefined';\nfunction getHTMLCanvasElement(canvas) {\n return typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement\n ? canvas\n : null;\n}\nlet statIdCounter = 0;\nconst DEFAULT_CLASSIC_ANIMATION_LOOP_PROPS = {\n onCreateDevice: (props) => luma.createDevice(props),\n onCreateContext: undefined,\n onAddHTML: undefined,\n onInitialize: () => ({}),\n onRender: () => { },\n onFinalize: () => { },\n onError: error => console.error(error), // eslint-disable-line no-console\n device: null,\n // debug: true,\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: true,\n autoResizeDrawingBuffer: true,\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n // deprecated\n // onCreateContext: (opts) => createGLContext(opts),\n gl: undefined,\n glOptions: {},\n createFramebuffer: false\n};\n/**\n * Convenient animation loop\n * @deprecated Use `@luma.gl/engine` AnimationLoop\n */\nexport class ClassicAnimationLoop {\n device;\n canvas;\n props;\n animationProps;\n // framebuffer: ClassicFramebuffer = null;\n timeline = null;\n stats;\n cpuTime;\n gpuTime;\n frameRate;\n display;\n needsRedraw = 'initialized';\n _initialized = false;\n _running = false;\n _animationFrameId = null;\n _pageLoadPromise = null;\n _nextFramePromise = null;\n _resolveNextFrame = null;\n _cpuStartTime = 0;\n // _gpuTimeQuery: Query | null = null;\n /** @deprecated */\n gl;\n /*\n */\n constructor(props = {}) {\n this.props = { ...DEFAULT_CLASSIC_ANIMATION_LOOP_PROPS, ...props };\n props = this.props;\n let { useDevicePixels = true } = this.props;\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-expect-error\n useDevicePixels = props.useDevicePixelRatio;\n }\n // state\n this.device = props.device;\n // @ts-expect-error\n this.gl = (this.device && this.device.gl) || props.gl;\n this.stats = props.stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n destroy() {\n this.stop();\n this._setDisplay(null);\n }\n /** @deprecated Use .destroy() */\n delete() {\n this.destroy();\n }\n setNeedsRedraw(reason) {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n start(opts = {}) {\n this._start(opts);\n return this;\n }\n /** Starts a render loop if not already running */\n async _start(props) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n try {\n await this._getPageLoadPromise();\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._createDevice(props);\n this._initialize(props);\n // Note: onIntialize can return a promise (in case app needs to load resources)\n // eslint-disable-next-line @typescript-eslint/await-thenable\n appContext = await this.onInitialize(this.animationProps);\n this._addCallbackData(appContext || {});\n }\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n return this;\n }\n catch (error) {\n this.props.onError(error);\n // this._running = false; // TODO\n return null;\n }\n }\n /** Explicitly draw a frame */\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n this._beginTimers();\n this._setupFrame();\n this._updateCallbackData();\n this._renderFrame(this.animationProps);\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n this._endTimers();\n return this;\n }\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n attachTimeline(timeline) {\n this.timeline = timeline;\n return this.timeline;\n }\n detachTimeline() {\n this.timeline = null;\n }\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n return getHTMLCanvasElement(this.gl.canvas)?.toDataURL();\n }\n isContextLost() {\n return this.gl.isContextLost();\n }\n onCreateDevice(deviceProps) {\n const { onCreateDevice } = this.props;\n return onCreateDevice(deviceProps);\n }\n onInitialize(animationProps) {\n const { onInitialize } = this.props;\n return onInitialize(animationProps);\n }\n onRender(animationProps) {\n const { onRender } = this.props;\n return onRender(animationProps);\n }\n onFinalize(animationProps) {\n const { onFinalize } = this.props;\n return onFinalize(animationProps);\n }\n // DEPRECATED/REMOVED METHODS\n /** @deprecated Use .onCreateDevice() */\n onCreateContext(props) {\n const { onCreateContext } = this.props;\n return onCreateContext(props);\n }\n /** @deprecated */\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-expect-error Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n // PRIVATE METHODS\n _initialize(props) {\n this._createFramebuffer();\n this._startEventHandling();\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n _setDisplay(display) {\n if (this.display) {\n this.display.destroy();\n this.display.animationLoop = null;\n }\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n this.display = display;\n }\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n _cancelAnimationFrame() {\n if (this._animationFrameId !== null) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(props) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(props);\n return;\n }\n // call callback\n this.onRender(props);\n // end callback\n }\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n /* eslint-disable @typescript-eslint/unbound-method */\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n this.animationProps = {\n device: this.device,\n gl: this.gl,\n stop: this.stop,\n canvas: this.gl.canvas,\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: null,\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n timeline: this.timeline,\n // @ts-ignore\n animationLoop: this,\n // Timeline time for back compatibility\n time: 0,\n // Experimental\n _mousePosition: null, // Event props\n /** @deprecated */\n // framebuffer: this.framebuffer,\n /** @deprecated */\n _timeline: this.timeline,\n /** @deprecated */\n _loop: this,\n /** @deprecated */\n _animationLoop: this\n };\n }\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const { width, height, aspect } = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n this.animationProps.needsRedraw = this.needsRedraw;\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n /** Add application's data to the app context object */\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n /** Either uses supplied or existing context, or calls provided callback to create one */\n async _createDevice(props) {\n const deviceProps = { ...this.props, ...props, ...this.props.glOptions };\n // TODO - support this.onCreateContext\n // Create the WebGL context if necessary\n // this.gl = this.props.gl ? instrumentGLContext(this.props.gl, deviceProps) : this.onCreateContext(deviceProps);\n this.device = await this.onCreateDevice(deviceProps);\n // @ts-expect-error\n this.gl = this.device.gl;\n // Reset the WebGL context.\n resetGLParameters(this.gl);\n this._createInfoDiv();\n }\n _createInfoDiv() {\n const canvas = getHTMLCanvasElement(this.gl.canvas);\n if (canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (canvas) {\n wrapperDiv.appendChild(canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = getHTMLCanvasElement(this.gl.canvas);\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n }\n else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n return { width, height, aspect };\n }\n /** Default viewport setup */\n _resizeViewport() {\n if (this.props.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n /**\n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n this.device.canvasContext.resize({ useDevicePixels: this.props.useDevicePixels });\n }\n }\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n this.cpuTime.timeStart();\n }\n _endTimers() {\n this.cpuTime.timeEnd();\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n // Event handling\n _startEventHandling() {\n const { canvas } = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n // Deprecated\n /** @deprecated */\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n // this.framebuffer = new ClassicFramebuffer(this.gl);\n }\n }\n /** @deprecated */\n _resizeFramebuffer() {\n // if (this.framebuffer) {\n // this.framebuffer.resize({\n // width: this.gl.drawingBufferWidth,\n // height: this.gl.drawingBufferHeight\n // });\n // }\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { webglDevice } from \"./create-test-device.js\";\n// TODO - Replace with new AnimationLoop from `@luma.gl/engine`\nimport { ClassicAnimationLoop as AnimationLoop } from \"./engine/classic-animation-loop.js\";\nconst DEFAULT_TEST_CASE = {\n name: 'Unnamed test',\n onInitialize: async () => { },\n onRender: ({ done }) => done(),\n onFinalize: () => { }\n};\nconst DEFAULT_TEST_PROPS = {\n width: undefined,\n height: undefined,\n // test lifecycle callback\n onTestStart: (testCase) => console.log(`# ${testCase.name}`),\n onTestPass: (testCase, result) => console.log(`ok ${testCase.name} passed`),\n onTestFail: (testCase, error) => console.log(`not ok ${testCase.name} failed`),\n // milliseconds to wait for each test case before aborting\n timeout: 2000,\n maxFramesToRender: undefined,\n imageDiffOptions: undefined\n};\n/** Runs an array of test cases */\nexport class TestRunner {\n device = webglDevice;\n props;\n isRunning = false;\n testOptions = { ...DEFAULT_TEST_PROPS };\n _animationProps;\n _animationLoop;\n _testCases = [];\n _testCaseData = null;\n _currentTestCase;\n _currentTestCaseStartTime;\n _currentTestCaseStartTick;\n // should be defined in snapshot-test-runner\n isDiffing = false;\n // @ts-expect-error\n isHeadless = Boolean(window.browserTestDriver_isHeadless);\n /**\n * props\n * AnimationLoop props\n */\n constructor(props = {}) {\n this.props = props;\n }\n /**\n * Add testCase(s)\n */\n add(testCases) {\n if (!Array.isArray(testCases)) {\n testCases = [testCases];\n }\n for (const testCase of testCases) {\n this._testCases.push(testCase);\n }\n return this;\n }\n /**\n * Returns a promise that resolves when all the test cases are done\n */\n run(options = {}) {\n this.testOptions = { ...this.testOptions, ...options };\n return new Promise((resolve, reject) => {\n this._animationLoop = new AnimationLoop({\n ...this.props,\n device: this.device,\n onRender: this._onRender.bind(this),\n onFinalize: () => {\n this.isRunning = false;\n resolve();\n }\n });\n this._animationLoop.start(this.props);\n this.isRunning = true;\n this.isDiffing = false;\n this._currentTestCase = null;\n }).catch(error => {\n this._fail({ error: error.message });\n // reject(error);\n });\n }\n /* Lifecycle methods for subclassing */\n initTestCase(testCase) {\n const { animationLoop } = testCase;\n if (animationLoop) {\n testCase.onInitialize = animationLoop.props.onInitialize.bind(animationLoop);\n testCase.onRender = animationLoop.props.onRender.bind(animationLoop);\n testCase.onFinalize = animationLoop.props.onFinalize.bind(animationLoop);\n }\n for (const key in DEFAULT_TEST_CASE) {\n testCase[key] = testCase[key] || DEFAULT_TEST_CASE[key];\n }\n }\n shouldRender(animationProps) {\n return true;\n }\n assert(testCase) {\n this._pass(testCase);\n this._next();\n }\n /* Utilities */\n _pass(result) {\n this.testOptions.onTestPass(this._currentTestCase, result);\n // this._animationLoop?.stop();\n }\n _fail(result) {\n this.testOptions.onTestFail(this._currentTestCase, result);\n // this._animationLoop?.stop();\n }\n _next() {\n this._nextTestCase();\n }\n /* Private methods */\n _onRender(animationProps) {\n this._animationProps = animationProps;\n const testCase = this._currentTestCase || this._nextTestCase();\n if (!testCase) {\n // all test cases are done\n this._animationLoop.stop();\n return;\n }\n let isDone = false;\n const testCaseAnimationProps = {\n ...animationProps,\n ...this._testCaseData,\n // tick/time starts from 0 for each test case\n startTime: this._currentTestCaseStartTime,\n time: animationProps.time - this._currentTestCaseStartTime,\n tick: animationProps.tick - this._currentTestCaseStartTick,\n // called by the test case when it is done rendering and ready for capture and diff\n done: () => {\n isDone = true;\n }\n };\n if (this._testCaseData && this.shouldRender(testCaseAnimationProps)) {\n // try {\n // test case is initialized, render frame\n testCase.onRender(testCaseAnimationProps);\n // } catch {\n // isDone = true;\n // }\n }\n const timeout = testCase.timeout || this.testOptions.timeout;\n if (timeout && testCaseAnimationProps.time > timeout) {\n isDone = true;\n }\n if (isDone) {\n this.assert(testCase);\n }\n }\n _nextTestCase() {\n const animationProps = this._animationProps;\n // finalize the current test case\n if (this._testCaseData) {\n for (const key in this._testCaseData) {\n const value = this._testCaseData[key];\n if (value && value.delete) {\n value.destroy();\n }\n }\n this._currentTestCase.onFinalize(Object.assign({}, animationProps, this._testCaseData));\n // reset WebGL context\n this.device.popState();\n this._currentTestCase = null;\n this._testCaseData = null;\n }\n // get the next test case\n const testCase = this._testCases.shift();\n if (testCase) {\n // start new test case\n this._currentTestCase = testCase;\n this._currentTestCaseStartTime = animationProps.time;\n this._currentTestCaseStartTick = animationProps.tick;\n this.initTestCase(testCase);\n // initialize test case\n // save WebGL context\n this.device.pushState();\n // aligned with the behavior of AnimationLoop.onInitialized\n // onInitialized could return a plain object or a promise\n const initProps = {\n ...animationProps,\n // tick/time starts from 0 for each test case\n startTime: animationProps.time,\n time: 0,\n tick: 0\n };\n // aligned with the behavior of AnimationLoop.onInitialized\n // onInitialized could return a plain object or a promise\n Promise.resolve(testCase.onInitialize(initProps)).then(userData => {\n this._testCaseData = userData || {};\n });\n // invoke user callback\n this.testOptions.onTestStart(testCase);\n }\n return testCase;\n }\n}\n", "// Get the bounding box of a DOMElement relative to the page\nexport function getBoundingBoxInPage(domElement) {\n const bbox = domElement.getBoundingClientRect();\n return {\n x: window.scrollX + bbox.x,\n y: window.scrollY + bbox.y,\n width: bbox.width,\n height: bbox.height\n };\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TestRunner } from \"./test-runner.js\";\nimport { getBoundingBoxInPage } from \"./utils/get-bounding-box.js\";\nexport class SnapshotTestRunner extends TestRunner {\n // should be defined here but hack access in TestRunner\n // private isDiffing: boolean = false;\n constructor(props) {\n super(props);\n this.testOptions.imageDiffOptions = {};\n }\n initTestCase(testCase) {\n super.initTestCase(testCase);\n if (!testCase.goldenImage) {\n throw new Error(`Test case ${testCase.name} does not have golden image`);\n }\n }\n shouldRender() {\n // wait for the current diffing to finish\n return !this.isDiffing;\n }\n async assert(testCase) {\n if (this.isDiffing) {\n // Already performing diffing\n return;\n }\n this.isDiffing = true;\n const canvas = this._animationProps?.canvas;\n if (!(canvas instanceof HTMLCanvasElement)) {\n throw new Error('canvas');\n }\n const diffOptions = {\n ...this.testOptions.imageDiffOptions,\n ...testCase.imageDiffOptions,\n goldenImage: testCase.goldenImage,\n region: getBoundingBoxInPage(canvas)\n };\n // Take screenshot and compare\n const result = await globalThis.browserTestDriver_captureAndDiffScreen(diffOptions);\n // invoke user callback\n if (result.success) {\n this._pass(result);\n }\n else {\n this._fail(result);\n }\n this.isDiffing = false;\n this._next();\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Stats } from '@probe.gl/stats';\nimport { TestRunner } from \"./test-runner.js\";\nexport class PerformanceTestRunner extends TestRunner {\n _stats = null;\n _fps = null;\n constructor(props) {\n super(props);\n Object.assign(this.testOptions, {\n maxFramesToRender: 60,\n targetFPS: 50\n });\n }\n initTestCase(testCase) {\n super.initTestCase(testCase);\n this._stats = new Stats({ id: testCase.name });\n this._fps = this._stats.get('fps');\n }\n shouldRender(animationProps) {\n this._fps?.timeEnd();\n this._fps?.timeStart();\n if (this._fps.count > this.testOptions.maxFramesToRender) {\n animationProps.done();\n }\n return true;\n }\n assert(testCase) {\n // @ts-expect-error\n const targetFPS = testCase.targetFPS || this.testOptions.targetFPS;\n const count = this._fps?.count;\n const fps = this._fps?.getHz() || 0;\n if (fps >= targetFPS) {\n this._pass({ fps, framesRendered: count });\n }\n else {\n this._fail({ fps, framesRendered: count });\n }\n this._next();\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Device, CanvasContext, DeviceFeatures } from '@luma.gl/core';\nimport { NullDeviceInfo } from \"./null-device-info.js\";\nimport { NullDeviceLimits } from \"./null-device-features.js\";\nimport { NullCanvasContext } from \"./null-canvas-context.js\";\nimport { NullBuffer } from \"./resources/null-buffer.js\";\nimport { NullFramebuffer } from \"./resources/null-framebuffer.js\";\nimport { NullShader } from \"./resources/null-shader.js\";\nimport { NullCommandEncoder } from \"./resources/null-command-buffer.js\";\nimport { NullSampler } from \"./resources/null-sampler.js\";\nimport { NullTexture } from \"./resources/null-texture.js\";\nimport { NullRenderPass } from \"./resources/null-render-pass.js\";\nimport { NullRenderPipeline } from \"./resources/null-render-pipeline.js\";\nimport { NullVertexArray } from \"./resources/null-vertex-array.js\";\nimport { NullTransformFeedback } from \"./resources/null-transform-feedback.js\";\nimport { NullQuerySet } from \"./resources/null-query-set.js\";\n/** Do-nothing device implementation for testing */\nexport class NullDevice extends Device {\n static isSupported() {\n return true;\n }\n static type = 'unknown';\n type = 'unknown';\n features = new DeviceFeatures([], this.props.disabledFeatures);\n limits = new NullDeviceLimits();\n info = NullDeviceInfo;\n canvasContext;\n lost;\n static attach(handle) {\n return new NullDevice({});\n }\n static async create(props = {}) {\n // Wait for page to load: if canvas is a string we need to query the DOM for the canvas element.\n // We only wait when props.canvas is string to avoids setting the global page onload callback unless necessary.\n if (typeof props.canvas === 'string') {\n await CanvasContext.pageLoaded;\n }\n return new NullDevice(props);\n }\n constructor(props) {\n super({ ...props, id: props.id || 'null-device' });\n this.canvasContext = new NullCanvasContext(this, props);\n this.lost = new Promise(resolve => { });\n this.canvasContext.resize();\n }\n /**\n * Destroys the context\n * @note Has no effect for WebGL browser contexts, there is no browser API for destroying contexts\n */\n destroy() { }\n get isLost() {\n return false;\n }\n getSize() {\n return [this.canvasContext.width, this.canvasContext.height];\n }\n isTextureFormatSupported(format) {\n return true;\n }\n isTextureFormatFilterable(format) {\n return true;\n }\n isTextureFormatRenderable(format) {\n return true;\n }\n // IMPLEMENTATION OF ABSTRACT DEVICE\n createCanvasContext(props) {\n return new NullCanvasContext(this, props);\n }\n createBuffer(props) {\n const newProps = this._getBufferProps(props);\n return new NullBuffer(this, newProps);\n }\n getDefaultRenderPass() {\n return new NullRenderPass(this, {});\n }\n _createTexture(props) {\n return new NullTexture(this, props);\n }\n createExternalTexture(props) {\n throw new Error('createExternalTexture() not implemented'); // return new Program(props);\n }\n createSampler(props) {\n return new NullSampler(this, props);\n }\n createShader(props) {\n return new NullShader(this, props);\n }\n createFramebuffer(props) {\n return new NullFramebuffer(this, props);\n }\n createVertexArray(props) {\n return new NullVertexArray(this, props);\n }\n createTransformFeedback(props) {\n return new NullTransformFeedback(this, props);\n }\n createQuerySet(props) {\n return new NullQuerySet(this, props);\n }\n createRenderPipeline(props) {\n return new NullRenderPipeline(this, props);\n }\n beginRenderPass(props) {\n return new NullRenderPass(this, props);\n }\n createComputePipeline(props) {\n throw new Error('ComputePipeline not supported in WebGL');\n }\n beginComputePass(props) {\n throw new Error('ComputePass not supported in WebGL');\n }\n createCommandEncoder(props = {}) {\n return new NullCommandEncoder(this, props);\n }\n submit() { }\n setParametersWebGL(parameters) { }\n getParametersWebGL(parameters) { }\n withParametersWebGL(parameters, func) {\n const { nocatch = true } = parameters;\n let value;\n if (nocatch) {\n // Avoid try catch to minimize stack size impact for safe execution paths\n return func();\n }\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n try {\n value = func();\n }\n catch {\n // ignore\n }\n return value;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const NullDeviceInfo = {\n type: 'unknown',\n gpu: 'software',\n gpuType: 'unknown',\n gpuBackend: 'unknown',\n vendor: 'no one',\n renderer: 'none',\n version: '1.0',\n shadingLanguage: 'glsl',\n shadingLanguageVersion: 300\n};\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { DeviceLimits } from '@luma.gl/core';\nexport class NullDeviceLimits extends DeviceLimits {\n maxTextureDimension1D = 0;\n maxTextureDimension2D = 2048;\n maxTextureDimension3D = 256;\n maxTextureArrayLayers = 256;\n maxBindGroups = 0;\n maxDynamicUniformBuffersPerPipelineLayout = 0;\n maxDynamicStorageBuffersPerPipelineLayout = 0;\n maxSampledTexturesPerShaderStage = 8;\n maxSamplersPerShaderStage = 16;\n maxStorageBuffersPerShaderStage = 0;\n maxStorageTexturesPerShaderStage = 0;\n maxUniformBuffersPerShaderStage = 20;\n maxUniformBufferBindingSize = 16384;\n maxStorageBufferBindingSize = 0;\n minUniformBufferOffsetAlignment = 0;\n minStorageBufferOffsetAlignment = 0;\n maxVertexBuffers = 16;\n maxVertexAttributes = 16;\n maxVertexBufferArrayStride = 2048;\n maxInterStageShaderComponents = 60;\n maxComputeWorkgroupStorageSize = 0;\n maxComputeInvocationsPerWorkgroup = 0;\n maxComputeWorkgroupSizeX = 0;\n maxComputeWorkgroupSizeY = 0;\n maxComputeWorkgroupSizeZ = 0;\n maxComputeWorkgroupsPerDimension = 0;\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CanvasContext } from '@luma.gl/core';\nimport { NullFramebuffer } from \"./resources/null-framebuffer.js\";\n/**\n * A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc\n */\nexport class NullCanvasContext extends CanvasContext {\n device;\n format = 'rgba8unorm';\n depthStencilFormat = 'depth24plus';\n presentationSize;\n _framebuffer = null;\n constructor(device, props) {\n // Note: Base class creates / looks up the canvas (unless under Node.js)\n super(props);\n this.device = device;\n this.presentationSize = [-1, -1];\n this._setAutoCreatedCanvasId(`${this.device.id}-canvas`);\n this.update();\n }\n getCurrentFramebuffer() {\n this.update();\n // Setting handle to null returns a reference to the default framebuffer\n this._framebuffer = this._framebuffer || new NullFramebuffer(this.device, { handle: null });\n return this._framebuffer;\n }\n /** Resizes and updates render targets if necessary */\n update() {\n const size = this.getPixelSize();\n const sizeChanged = size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];\n if (sizeChanged) {\n this.presentationSize = size;\n this.resize();\n }\n }\n resize(options) {\n if (this.canvas) {\n const devicePixelRatio = this.getDevicePixelRatio(options?.useDevicePixels);\n this.setDevicePixelRatio(devicePixelRatio, options);\n return;\n }\n }\n getDrawingBufferSize() {\n return [this.width, this.height];\n }\n commit() { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Framebuffer } from '@luma.gl/core';\nexport class NullFramebuffer extends Framebuffer {\n device;\n colorAttachments = [];\n depthStencilAttachment = null;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer } from '@luma.gl/core';\nexport class NullBuffer extends Buffer {\n device;\n byteLength;\n constructor(device, props = {}) {\n super(device, props);\n this.device = device;\n const byteOffset = props.byteOffset || 0;\n const byteLength = props.byteLength ?? (props.data ? props.data.byteLength + byteOffset : 0);\n // assert(byteLength >= 0);\n this.byteLength = byteLength;\n this.trackAllocatedMemory(byteLength);\n }\n destroy() {\n if (!this.destroyed) {\n super.destroy();\n this.trackDeallocatedMemory();\n }\n }\n async readAsync(byteOffset = 0, byteLength) {\n byteLength = byteLength ?? this.byteLength - byteOffset;\n return new Uint8Array(byteLength);\n }\n write(data, byteOffset = 0) {\n // assert(data.byteLength + byteOffset <= this.byteLength);\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Shader } from '@luma.gl/core';\nexport class NullShader extends Shader {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n async getCompilationInfo() {\n return [];\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CommandEncoder } from '@luma.gl/core';\nexport class NullCommandEncoder extends CommandEncoder {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n finish() { }\n copyBufferToBuffer(options) { }\n copyBufferToTexture(options) { }\n copyTextureToBuffer(options) { }\n copyTextureToTexture(options) { }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n resolveQuerySet(querySet) { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Sampler } from '@luma.gl/core';\nexport class NullSampler extends Sampler {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Texture } from '@luma.gl/core';\nimport { NullSampler } from \"./null-sampler.js\";\nimport { NullTextureView } from \"./null-texture-view.js\";\nexport class NullTexture extends Texture {\n device;\n sampler;\n view;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n // Signature: new Texture2D(gl, {data: url})\n if (typeof this.props?.data === 'string') {\n throw new Error('Texture2D: Loading textures from URLs is not supported');\n }\n this.initialize(this.props);\n Object.seal(this);\n }\n destroy() {\n if (!this.destroyed) {\n super.destroy();\n this.trackDeallocatedMemory('Texture');\n }\n }\n createView(props) {\n return new NullTextureView(this.device, { ...props, texture: this });\n }\n setTexture1DData(data) {\n throw new Error('not implemented');\n }\n setTexture2DData(lodData, depth, target) {\n throw new Error('not implemented');\n }\n setTexture3DData(lodData, depth, target) {\n throw new Error('not implemented');\n }\n setTextureCubeData(data, depth) {\n throw new Error('not implemented');\n }\n setTextureArrayData(data) {\n throw new Error('not implemented');\n }\n setTextureCubeArrayData(data) {\n throw new Error('not implemented');\n }\n initialize(props = {}) {\n const data = props.data;\n if (data instanceof Promise) {\n data.then(resolvedImageData => this.initialize(Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })));\n return this;\n }\n this.setImageData(props);\n this.setSampler(props.sampler);\n this.view = new NullTextureView(this.device, {\n ...props,\n texture: this,\n mipLevelCount: 1,\n arrayLayerCount: 1\n });\n return this;\n }\n setSampler(sampler = {}) {\n if (sampler instanceof NullSampler) {\n this.sampler = sampler;\n }\n else {\n this.sampler = new NullSampler(this.device, sampler);\n }\n return this;\n }\n setImageData(options) {\n this.trackDeallocatedMemory('Texture');\n const { data } = options;\n if (data && data.byteLength) {\n this.trackAllocatedMemory(data.byteLength, 'Texture');\n }\n else {\n const bytesPerPixel = 4;\n this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');\n }\n const width = options.width ?? data.width;\n const height = options.height ?? data.height;\n this.width = width;\n this.height = height;\n return this;\n }\n setSubImageData(options) {\n // const {data, x = 0, y = 0} = options;\n // const width = options.width ?? (data as ImageBitmap).width;\n // const height = options.height ?? (data as ImageBitmap).height;\n // assert(width + x <= this.width && height + y <= this.height);\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TextureView, Texture } from '@luma.gl/core';\nexport class NullTextureView extends TextureView {\n device;\n texture;\n constructor(device, props) {\n super(device, { ...Texture.defaultProps, ...props });\n this.device = device;\n this.texture = props.texture;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPass } from '@luma.gl/core';\nexport class NullRenderPass extends RenderPass {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n end() { }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n setParameters(parameters = {}) { }\n beginOcclusionQuery(queryIndex) { }\n endOcclusionQuery() { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPipeline } from '@luma.gl/core';\n/** Creates a new render pipeline */\nexport class NullRenderPipeline extends RenderPipeline {\n device;\n vs;\n fs;\n uniforms = {};\n bindings = {};\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.vs = props.vs;\n this.fs = props.fs;\n this.shaderLayout = props.shaderLayout || {\n attributes: [],\n bindings: [],\n uniforms: []\n };\n }\n setBindings(bindings) {\n Object.assign(this.bindings, bindings);\n }\n setUniformsWebGL(uniforms) {\n Object.assign(this.uniforms, uniforms);\n }\n draw(options) {\n const { renderPass, vertexArray } = options;\n vertexArray.bindBeforeRender(renderPass);\n vertexArray.unbindAfterRender(renderPass);\n return true;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VertexArray } from '@luma.gl/core';\nexport class NullVertexArray extends VertexArray {\n device;\n // Create a VertexArray\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n setIndexBuffer(indexBuffer) {\n this.indexBuffer = indexBuffer;\n }\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, attributeBuffer) {\n const attributeInfo = this.attributeInfos[location];\n if (!attributeInfo) {\n throw new Error(`Unknown attribute location ${location}`);\n }\n this.attributes[location] = attributeBuffer;\n }\n bindBeforeRender() { }\n unbindAfterRender() { }\n setConstantWebGL(location, value) { }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TransformFeedback } from '@luma.gl/core';\nexport class NullTransformFeedback extends TransformFeedback {\n device;\n layout;\n buffers = {};\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.layout = this.props.layout;\n if (props.buffers) {\n this.setBuffers(props.buffers);\n }\n Object.seal(this);\n }\n begin(topology = 'point-list') { }\n end() { }\n setBuffers(buffers) {\n this.buffers = {};\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n }\n setBuffer(locationOrName, bufferOrRange) {\n this.buffers[locationOrName] = bufferOrRange;\n }\n getBuffer(locationOrName) {\n return this.buffers[locationOrName] || null;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { QuerySet } from '@luma.gl/core';\nexport class NullQuerySet extends QuerySet {\n device;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n }\n}\n", "/**\n * Tests that an argument matches the type.\n * @note fails during typescript type check, not during runtime.\n */\nexport function checkType(value) { }\n", "/** Recursively copies objects */\nexport function deepCopy(object) {\n if (Array.isArray(object)) {\n return object.map(element => deepCopy(element));\n }\n if (object !== null && typeof object === 'object') {\n const newObject = {};\n for (const key in object) {\n newObject[key] = deepCopy(object[key]);\n }\n return newObject;\n }\n return object;\n}\n", "/* global luma */\nexport function getResourceCounts() {\n // @ts-ignore\n const resourceStats = luma.stats.get('Resource Counts');\n return {\n Texture2D: resourceStats.get('Texture2Ds Active').count,\n Buffer: resourceStats.get('Buffers Active').count\n };\n}\nexport function getLeakedResources(startCounts, endCounts) {\n let leakedResources = null;\n const info = 'leaking: ';\n for (const resourceName in endCounts) {\n const leakCount = endCounts[resourceName] - startCounts[resourceName];\n if (leakCount !== 0) {\n leakedResources = Object.assign({}, leakedResources, {\n [resourceName]: leakCount,\n info: `${info} ${resourceName}: ${leakCount}, `\n });\n }\n }\n return leakedResources;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_core", "import_webgl", "import_core", "import_webgl", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core", "import_core"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import type { CanvasContextProps } from '@luma.gl/core';
1
+ import type { CanvasContextProps, TextureFormat } from '@luma.gl/core';
2
2
  import { CanvasContext } from '@luma.gl/core';
3
3
  import type { NullDevice } from "./null-device.js";
4
4
  import { NullFramebuffer } from "./resources/null-framebuffer.js";
@@ -7,6 +7,8 @@ import { NullFramebuffer } from "./resources/null-framebuffer.js";
7
7
  */
8
8
  export declare class NullCanvasContext extends CanvasContext {
9
9
  readonly device: NullDevice;
10
+ readonly format: TextureFormat;
11
+ readonly depthStencilFormat: TextureFormat;
10
12
  presentationSize: [number, number];
11
13
  private _framebuffer;
12
14
  constructor(device: NullDevice, props: CanvasContextProps);
@@ -1 +1 @@
1
- {"version":3,"file":"null-canvas-context.d.ts","sourceRoot":"","sources":["../../src/null-device/null-canvas-context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAC,UAAU,EAAC,yBAAsB;AAC9C,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAE7D;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,YAAY,CAAgC;gBAExC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB;IASzD,qBAAqB,IAAI,eAAe;IAOxC,sDAAsD;IACtD,MAAM;IAUN,MAAM,CAAC,OAAO,CAAC,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAC,GAAG,IAAI;IAQpF,oBAAoB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAIjD,MAAM;CACP"}
1
+ {"version":3,"file":"null-canvas-context.d.ts","sourceRoot":"","sources":["../../src/null-device/null-canvas-context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AACrE,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAC,UAAU,EAAC,yBAAsB;AAC9C,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAE7D;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAgB;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAiB;IAE3D,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,YAAY,CAAgC;gBAExC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB;IASzD,qBAAqB,IAAI,eAAe;IAOxC,sDAAsD;IACtD,MAAM;IAUN,MAAM,CAAC,OAAO,CAAC,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAC,GAAG,IAAI;IAQpF,oBAAoB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAIjD,MAAM;CACP"}
@@ -8,6 +8,8 @@ import { NullFramebuffer } from "./resources/null-framebuffer.js";
8
8
  */
9
9
  export class NullCanvasContext extends CanvasContext {
10
10
  device;
11
+ format = 'rgba8unorm';
12
+ depthStencilFormat = 'depth24plus';
11
13
  presentationSize;
12
14
  _framebuffer = null;
13
15
  constructor(device, props) {
@@ -1 +1 @@
1
- {"version":3,"file":"null-device.d.ts","sourceRoot":"","sources":["../../src/null-device/null-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"null-device.d.ts","sourceRoot":"","sources":["../../src/null-device/null-device.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { Device, CanvasContext, uid, DeviceFeatures } from '@luma.gl/core';
4
+ import { Device, CanvasContext, DeviceFeatures } from '@luma.gl/core';
5
5
  import { NullDeviceInfo } from "./null-device-info.js";
6
6
  import { NullDeviceLimits } from "./null-device-features.js";
7
7
  import { NullCanvasContext } from "./null-canvas-context.js";
@@ -40,7 +40,7 @@ export class NullDevice extends Device {
40
40
  return new NullDevice(props);
41
41
  }
42
42
  constructor(props) {
43
- super({ ...props, id: props.id || uid('dummy-device') });
43
+ super({ ...props, id: props.id || 'null-device' });
44
44
  this.canvasContext = new NullCanvasContext(this, props);
45
45
  this.lost = new Promise(resolve => { });
46
46
  this.canvasContext.resize();
@@ -1 +1 @@
1
- {"version":3,"file":"null-buffer.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAS,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAE/C,qBAAa,UAAW,SAAQ,MAAM;IACpC,MAAM,EAAE,UAAU,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,UAAU,EAAE,KAAK,GAAE,WAAgB;IAa9C,OAAO,IAAI,IAAI;IAOlB,SAAS,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKzE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI;CAG3D"}
1
+ {"version":3,"file":"null-buffer.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAE/C,qBAAa,UAAW,SAAQ,MAAM;IACpC,MAAM,EAAE,UAAU,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,UAAU,EAAE,KAAK,GAAE,WAAgB;IAa9C,OAAO,IAAI,IAAI;IAOlB,SAAS,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKzE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI;CAG3D"}
@@ -1,7 +1,7 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { Buffer, assert } from '@luma.gl/core';
4
+ import { Buffer } from '@luma.gl/core';
5
5
  export class NullBuffer extends Buffer {
6
6
  device;
7
7
  byteLength;
@@ -10,7 +10,7 @@ export class NullBuffer extends Buffer {
10
10
  this.device = device;
11
11
  const byteOffset = props.byteOffset || 0;
12
12
  const byteLength = props.byteLength ?? (props.data ? props.data.byteLength + byteOffset : 0);
13
- assert(byteLength >= 0);
13
+ // assert(byteLength >= 0);
14
14
  this.byteLength = byteLength;
15
15
  this.trackAllocatedMemory(byteLength);
16
16
  }
@@ -25,6 +25,6 @@ export class NullBuffer extends Buffer {
25
25
  return new Uint8Array(byteLength);
26
26
  }
27
27
  write(data, byteOffset = 0) {
28
- assert(data.byteLength + byteOffset <= this.byteLength);
28
+ // assert(data.byteLength + byteOffset <= this.byteLength);
29
29
  }
30
30
  }
@@ -1,8 +1,11 @@
1
1
  import type { FramebufferProps } from '@luma.gl/core';
2
2
  import { Framebuffer } from '@luma.gl/core';
3
3
  import type { NullDevice } from "../null-device.js";
4
+ import type { NullTextureView } from "./null-texture-view.js";
4
5
  export declare class NullFramebuffer extends Framebuffer {
5
6
  device: NullDevice;
7
+ colorAttachments: NullTextureView[];
8
+ depthStencilAttachment: NullTextureView | null;
6
9
  constructor(device: NullDevice, props: FramebufferProps);
7
10
  }
8
11
  //# sourceMappingURL=null-framebuffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"null-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-framebuffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAE/C,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,MAAM,EAAE,UAAU,CAAC;gBAEP,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB;CAIxD"}
1
+ {"version":3,"file":"null-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-framebuffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAC/C,OAAO,KAAK,EAAC,eAAe,EAAC,+BAA4B;AAEzD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,MAAM,EAAE,UAAU,CAAC;IAEnB,gBAAgB,EAAE,eAAe,EAAE,CAAM;IACzC,sBAAsB,EAAE,eAAe,GAAG,IAAI,CAAQ;gBAE1C,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB;CAIxD"}
@@ -4,6 +4,8 @@
4
4
  import { Framebuffer } from '@luma.gl/core';
5
5
  export class NullFramebuffer extends Framebuffer {
6
6
  device;
7
+ colorAttachments = [];
8
+ depthStencilAttachment = null;
7
9
  constructor(device, props) {
8
10
  super(device, props);
9
11
  this.device = device;
@@ -1 +1 @@
1
- {"version":3,"file":"null-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-render-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAO,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAC/C,OAAO,EAAC,UAAU,EAAC,yBAAsB;AAEzC,oCAAoC;AACpC,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,EAAE,UAAU,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;gBAE3B,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB;IAc1D,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI;IAIvE,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO;CAMZ"}
1
+ {"version":3,"file":"null-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-render-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAC/C,OAAO,EAAC,UAAU,EAAC,yBAAsB;AAEzC,oCAAoC;AACpC,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,EAAE,UAAU,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;gBAE3B,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB;IAc1D,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI;IAIvE,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO;CAMZ"}
@@ -1,7 +1,7 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { RenderPipeline, cast } from '@luma.gl/core';
4
+ import { RenderPipeline } from '@luma.gl/core';
5
5
  /** Creates a new render pipeline */
6
6
  export class NullRenderPipeline extends RenderPipeline {
7
7
  device;
@@ -12,8 +12,8 @@ export class NullRenderPipeline extends RenderPipeline {
12
12
  constructor(device, props) {
13
13
  super(device, props);
14
14
  this.device = device;
15
- this.vs = cast(props.vs);
16
- this.fs = cast(props.fs);
15
+ this.vs = props.vs;
16
+ this.fs = props.fs;
17
17
  this.shaderLayout = props.shaderLayout || {
18
18
  attributes: [],
19
19
  bindings: [],
@@ -1,22 +1,24 @@
1
1
  import type { TextureProps, Sampler, SamplerProps, TextureViewProps } from '@luma.gl/core';
2
+ import type { Texture1DData, Texture2DData, Texture3DData, TextureCubeData, TextureArrayData, TextureCubeArrayData } from '@luma.gl/core';
2
3
  import { Texture } from '@luma.gl/core';
3
4
  import { NullDevice } from "../null-device.js";
4
5
  import { NullSampler } from "./null-sampler.js";
5
6
  import { NullTextureView } from "./null-texture-view.js";
6
- export declare class NullTexture extends Texture<TextureProps> {
7
+ export declare class NullTexture extends Texture {
7
8
  readonly device: NullDevice;
8
9
  sampler: NullSampler;
9
10
  view: NullTextureView;
10
11
  constructor(device: NullDevice, props: TextureProps);
11
12
  destroy(): void;
12
13
  createView(props: TextureViewProps): NullTextureView;
14
+ setTexture1DData(data: Texture1DData): void;
15
+ setTexture2DData(lodData: Texture2DData, depth?: number, target?: number): void;
16
+ setTexture3DData(lodData: Texture3DData, depth?: number, target?: number): void;
17
+ setTextureCubeData(data: TextureCubeData, depth?: number): void;
18
+ setTextureArrayData(data: TextureArrayData): void;
19
+ setTextureCubeArrayData(data: TextureCubeArrayData): void;
13
20
  initialize(props?: TextureProps): this;
14
21
  setSampler(sampler?: Sampler | SamplerProps): this;
15
- resize(options: {
16
- height: number;
17
- width: number;
18
- mipmaps?: boolean;
19
- }): this;
20
22
  setImageData(options: {
21
23
  data?: any;
22
24
  width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"null-texture.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-texture.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACzF,OAAO,EAAC,OAAO,EAAoB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAC,UAAU,EAAC,0BAAuB;AAC1C,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAC3C,OAAO,EAAC,eAAe,EAAC,+BAA4B;AAEpD,qBAAa,WAAY,SAAQ,OAAO,CAAC,YAAY,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,OAAO,EAAG,WAAW,CAAC;IACtB,IAAI,EAAG,eAAe,CAAC;gBAEX,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAe1C,OAAO,IAAI,IAAI;IAOxB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe;IAIpD,UAAU,CAAC,KAAK,GAAE,YAAiB,GAAG,IAAI;IA6B1C,UAAU,CAAC,OAAO,GAAE,OAAO,GAAG,YAAiB,GAAG,IAAI;IAUtD,MAAM,CAAC,OAAO,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAYzE,YAAY,CAAC,OAAO,EAAE;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC;IAqBnE,eAAe,CAAC,OAAO,EAAE;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAC;CAM9F"}
1
+ {"version":3,"file":"null-texture.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-texture.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,0BAAuB;AAC1C,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAC3C,OAAO,EAAC,eAAe,EAAC,+BAA4B;AAEpD,qBAAa,WAAY,SAAQ,OAAO;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,eAAe,CAAC;gBAEV,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAe1C,OAAO,IAAI,IAAI;IAOxB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe;IAIpD,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI3C,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/E,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/E,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/D,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIjD,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAIzD,UAAU,CAAC,KAAK,GAAE,YAAiB,GAAG,IAAI;IA6B1C,UAAU,CAAC,OAAO,GAAE,OAAO,GAAG,YAAiB,GAAG,IAAI;IAUtD,YAAY,CAAC,OAAO,EAAE;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC;IAqBnE,eAAe,CAAC,OAAO,EAAE;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAC;CAM9F"}
@@ -1,7 +1,7 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { Texture, assert, loadImage } from '@luma.gl/core';
4
+ import { Texture } from '@luma.gl/core';
5
5
  import { NullSampler } from "./null-sampler.js";
6
6
  import { NullTextureView } from "./null-texture-view.js";
7
7
  export class NullTexture extends Texture {
@@ -13,7 +13,7 @@ export class NullTexture extends Texture {
13
13
  this.device = device;
14
14
  // Signature: new Texture2D(gl, {data: url})
15
15
  if (typeof this.props?.data === 'string') {
16
- Object.assign(this.props, { data: loadImage(this.props.data) });
16
+ throw new Error('Texture2D: Loading textures from URLs is not supported');
17
17
  }
18
18
  this.initialize(this.props);
19
19
  Object.seal(this);
@@ -27,6 +27,24 @@ export class NullTexture extends Texture {
27
27
  createView(props) {
28
28
  return new NullTextureView(this.device, { ...props, texture: this });
29
29
  }
30
+ setTexture1DData(data) {
31
+ throw new Error('not implemented');
32
+ }
33
+ setTexture2DData(lodData, depth, target) {
34
+ throw new Error('not implemented');
35
+ }
36
+ setTexture3DData(lodData, depth, target) {
37
+ throw new Error('not implemented');
38
+ }
39
+ setTextureCubeData(data, depth) {
40
+ throw new Error('not implemented');
41
+ }
42
+ setTextureArrayData(data) {
43
+ throw new Error('not implemented');
44
+ }
45
+ setTextureCubeArrayData(data) {
46
+ throw new Error('not implemented');
47
+ }
30
48
  initialize(props = {}) {
31
49
  const data = props.data;
32
50
  if (data instanceof Promise) {
@@ -55,17 +73,6 @@ export class NullTexture extends Texture {
55
73
  }
56
74
  return this;
57
75
  }
58
- resize(options) {
59
- const { height, width, mipmaps = false } = options;
60
- if (width !== this.width || height !== this.height) {
61
- return this.initialize({
62
- width,
63
- height,
64
- mipmaps
65
- });
66
- }
67
- return this;
68
- }
69
76
  setImageData(options) {
70
77
  this.trackDeallocatedMemory('Texture');
71
78
  const { data } = options;
@@ -83,9 +90,9 @@ export class NullTexture extends Texture {
83
90
  return this;
84
91
  }
85
92
  setSubImageData(options) {
86
- const { data, x = 0, y = 0 } = options;
87
- const width = options.width ?? data.width;
88
- const height = options.height ?? data.height;
89
- assert(width + x <= this.width && height + y <= this.height);
93
+ // const {data, x = 0, y = 0} = options;
94
+ // const width = options.width ?? (data as ImageBitmap).width;
95
+ // const height = options.height ?? (data as ImageBitmap).height;
96
+ // assert(width + x <= this.width && height + y <= this.height);
90
97
  }
91
98
  }
@@ -1,4 +1,5 @@
1
- import type { Buffer, VertexArrayProps, TypedArray } from '@luma.gl/core';
1
+ import type { TypedArray } from '@math.gl/types';
2
+ import type { Buffer, VertexArrayProps } from '@luma.gl/core';
2
3
  import { VertexArray } from '@luma.gl/core';
3
4
  import type { NullDevice } from "../null-device.js";
4
5
  export declare class NullVertexArray extends VertexArray {
@@ -1 +1 @@
1
- {"version":3,"file":"null-vertex-array.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-vertex-array.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACxE,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAE/C,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,MAAM,EAAE,UAAU,CAAC;gBAGP,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB;IAKvD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhD,gGAAgG;IAChG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAQ1D,gBAAgB,IAAI,IAAI;IAExB,iBAAiB,IAAI,IAAI;IAEhB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;CAC5E"}
1
+ {"version":3,"file":"null-vertex-array.d.ts","sourceRoot":"","sources":["../../../src/null-device/resources/null-vertex-array.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAC,UAAU,EAAC,0BAAuB;AAE/C,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,MAAM,EAAE,UAAU,CAAC;gBAGP,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB;IAKvD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhD,gGAAgG;IAChG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAQ1D,gBAAgB,IAAI,IAAI;IAExB,iBAAiB,IAAI,IAAI;IAEhB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;CAC5E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/test-utils",
3
- "version": "9.0.11",
3
+ "version": "9.1.0-alpha.2",
4
4
  "description": "Automated WebGL testing utilities with Puppeteer and image diffing",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -36,15 +36,15 @@
36
36
  "pre-build": "echo test utils has no bundle"
37
37
  },
38
38
  "peerDependencies": {
39
- "@luma.gl/core": "^9.0.0",
40
- "@luma.gl/engine": "^9.0.0",
41
- "@luma.gl/shadertools": "^9.0.0",
42
- "@luma.gl/webgl": "^9.0.0",
43
- "@luma.gl/webgpu": "^9.0.0"
39
+ "@luma.gl/core": "^9.0.0-beta",
40
+ "@luma.gl/engine": "^9.0.0-beta",
41
+ "@luma.gl/shadertools": "^9.0.0-beta",
42
+ "@luma.gl/webgl": "^9.0.0-beta",
43
+ "@luma.gl/webgpu": "^9.0.0-beta"
44
44
  },
45
45
  "dependencies": {
46
- "@probe.gl/env": "^4.0.2",
47
- "@probe.gl/stats": "^4.0.2"
46
+ "@probe.gl/env": "^4.0.8",
47
+ "@probe.gl/stats": "^4.0.8"
48
48
  },
49
- "gitHead": "82c56392f73c3f7b258e2928d687a4beca2e2838"
49
+ "gitHead": "cb258afdefd2d5712d2decca35c746dd9d77a03e"
50
50
  }
@@ -4,14 +4,8 @@
4
4
 
5
5
  // TODO - replace createGLContext, instrumentGLContext, resizeGLContext?
6
6
  // TODO - remove dependency on framebuffer (bundle size impact)
7
- import {
8
- luma,
9
- Device,
10
- DeviceProps,
11
- log,
12
- requestAnimationFrame,
13
- cancelAnimationFrame
14
- } from '@luma.gl/core';
7
+ import {luma, Device, DeviceProps, log} from '@luma.gl/core';
8
+ import {requestAnimationFrame, cancelAnimationFrame} from '@luma.gl/engine';
15
9
  import {Timeline, AnimationProps} from '@luma.gl/engine';
16
10
  import {Stats, Stat} from '@probe.gl/stats';
17
11
  import {isBrowser} from '@probe.gl/env';
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {CanvasContextProps} from '@luma.gl/core';
5
+ import type {CanvasContextProps, TextureFormat} from '@luma.gl/core';
6
6
  import {CanvasContext} from '@luma.gl/core';
7
7
  import type {NullDevice} from './null-device';
8
8
  import {NullFramebuffer} from './resources/null-framebuffer';
@@ -12,6 +12,9 @@ import {NullFramebuffer} from './resources/null-framebuffer';
12
12
  */
13
13
  export class NullCanvasContext extends CanvasContext {
14
14
  readonly device: NullDevice;
15
+ readonly format: TextureFormat = 'rgba8unorm';
16
+ readonly depthStencilFormat: TextureFormat = 'depth24plus';
17
+
15
18
  presentationSize: [number, number];
16
19
  private _framebuffer: NullFramebuffer | null = null;
17
20
 
@@ -9,7 +9,7 @@ import type {
9
9
  VertexArray,
10
10
  VertexArrayProps
11
11
  } from '@luma.gl/core';
12
- import {Device, CanvasContext, uid, DeviceFeatures} from '@luma.gl/core';
12
+ import {Device, CanvasContext, DeviceFeatures} from '@luma.gl/core';
13
13
 
14
14
  import type {
15
15
  BufferProps,
@@ -74,7 +74,7 @@ export class NullDevice extends Device {
74
74
  }
75
75
 
76
76
  constructor(props: DeviceProps) {
77
- super({...props, id: props.id || uid('dummy-device')});
77
+ super({...props, id: props.id || 'null-device'});
78
78
 
79
79
  this.canvasContext = new NullCanvasContext(this, props);
80
80
  this.lost = new Promise(resolve => {});
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {BufferProps} from '@luma.gl/core';
6
- import {Buffer, assert} from '@luma.gl/core';
6
+ import {Buffer} from '@luma.gl/core';
7
7
  import type {NullDevice} from '../null-device';
8
8
 
9
9
  export class NullBuffer extends Buffer {
@@ -18,7 +18,7 @@ export class NullBuffer extends Buffer {
18
18
  const byteOffset = props.byteOffset || 0;
19
19
  const byteLength = props.byteLength ?? (props.data ? props.data.byteLength + byteOffset : 0);
20
20
 
21
- assert(byteLength >= 0);
21
+ // assert(byteLength >= 0);
22
22
 
23
23
  this.byteLength = byteLength;
24
24
  this.trackAllocatedMemory(byteLength);
@@ -37,6 +37,6 @@ export class NullBuffer extends Buffer {
37
37
  }
38
38
 
39
39
  write(data: ArrayBufferView, byteOffset: number = 0): void {
40
- assert(data.byteLength + byteOffset <= this.byteLength);
40
+ // assert(data.byteLength + byteOffset <= this.byteLength);
41
41
  }
42
42
  }
@@ -5,10 +5,14 @@
5
5
  import type {FramebufferProps} from '@luma.gl/core';
6
6
  import {Framebuffer} from '@luma.gl/core';
7
7
  import type {NullDevice} from '../null-device';
8
+ import type {NullTextureView} from './null-texture-view';
8
9
 
9
10
  export class NullFramebuffer extends Framebuffer {
10
11
  device: NullDevice;
11
12
 
13
+ colorAttachments: NullTextureView[] = [];
14
+ depthStencilAttachment: NullTextureView | null = null;
15
+
12
16
  constructor(device: NullDevice, props: FramebufferProps) {
13
17
  super(device, props);
14
18
  this.device = device;
@@ -4,7 +4,7 @@
4
4
 
5
5
  import type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';
6
6
  import type {RenderPass, VertexArray} from '@luma.gl/core';
7
- import {RenderPipeline, cast} from '@luma.gl/core';
7
+ import {RenderPipeline} from '@luma.gl/core';
8
8
 
9
9
  import type {NullDevice} from '../null-device';
10
10
  import {NullShader} from './null-shader';
@@ -22,8 +22,8 @@ export class NullRenderPipeline extends RenderPipeline {
22
22
  super(device, props);
23
23
  this.device = device;
24
24
 
25
- this.vs = cast<NullShader>(props.vs);
26
- this.fs = cast<NullShader>(props.fs);
25
+ this.vs = props.vs as NullShader;
26
+ this.fs = props.fs as NullShader;
27
27
 
28
28
  this.shaderLayout = props.shaderLayout || {
29
29
  attributes: [],
@@ -3,16 +3,25 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {TextureProps, Sampler, SamplerProps, TextureViewProps} from '@luma.gl/core';
6
- import {Texture, assert, loadImage} from '@luma.gl/core';
6
+ import type {
7
+ Texture1DData,
8
+ Texture2DData,
9
+ Texture3DData,
10
+ TextureCubeData,
11
+ TextureArrayData,
12
+ TextureCubeArrayData
13
+ } from '@luma.gl/core';
14
+
15
+ import {Texture} from '@luma.gl/core';
7
16
  import {NullDevice} from '../null-device';
8
17
  import {NullSampler} from './null-sampler';
9
18
  import {NullTextureView} from './null-texture-view';
10
19
 
11
- export class NullTexture extends Texture<TextureProps> {
20
+ export class NullTexture extends Texture {
12
21
  readonly device: NullDevice;
13
22
 
14
- sampler!: NullSampler;
15
- view!: NullTextureView;
23
+ sampler: NullSampler;
24
+ view: NullTextureView;
16
25
 
17
26
  constructor(device: NullDevice, props: TextureProps) {
18
27
  super(device, props);
@@ -21,7 +30,7 @@ export class NullTexture extends Texture<TextureProps> {
21
30
 
22
31
  // Signature: new Texture2D(gl, {data: url})
23
32
  if (typeof this.props?.data === 'string') {
24
- Object.assign(this.props, {data: loadImage(this.props.data)});
33
+ throw new Error('Texture2D: Loading textures from URLs is not supported');
25
34
  }
26
35
 
27
36
  this.initialize(this.props);
@@ -40,6 +49,30 @@ export class NullTexture extends Texture<TextureProps> {
40
49
  return new NullTextureView(this.device, {...props, texture: this});
41
50
  }
42
51
 
52
+ setTexture1DData(data: Texture1DData): void {
53
+ throw new Error('not implemented');
54
+ }
55
+
56
+ setTexture2DData(lodData: Texture2DData, depth?: number, target?: number): void {
57
+ throw new Error('not implemented');
58
+ }
59
+
60
+ setTexture3DData(lodData: Texture3DData, depth?: number, target?: number): void {
61
+ throw new Error('not implemented');
62
+ }
63
+
64
+ setTextureCubeData(data: TextureCubeData, depth?: number): void {
65
+ throw new Error('not implemented');
66
+ }
67
+
68
+ setTextureArrayData(data: TextureArrayData): void {
69
+ throw new Error('not implemented');
70
+ }
71
+
72
+ setTextureCubeArrayData(data: TextureCubeArrayData): void {
73
+ throw new Error('not implemented');
74
+ }
75
+
43
76
  initialize(props: TextureProps = {}): this {
44
77
  const data = props.data;
45
78
 
@@ -79,18 +112,6 @@ export class NullTexture extends Texture<TextureProps> {
79
112
  return this;
80
113
  }
81
114
 
82
- resize(options: {height: number; width: number; mipmaps?: boolean}): this {
83
- const {height, width, mipmaps = false} = options;
84
- if (width !== this.width || height !== this.height) {
85
- return this.initialize({
86
- width,
87
- height,
88
- mipmaps
89
- });
90
- }
91
- return this;
92
- }
93
-
94
115
  setImageData(options: {data?: any; width?: number; height?: number}) {
95
116
  this.trackDeallocatedMemory('Texture');
96
117
 
@@ -113,9 +134,9 @@ export class NullTexture extends Texture<TextureProps> {
113
134
  }
114
135
 
115
136
  setSubImageData(options: {data: any; width?: number; height?: number; x?: number; y?: number}) {
116
- const {data, x = 0, y = 0} = options;
117
- const width = options.width ?? (data as ImageBitmap).width;
118
- const height = options.height ?? (data as ImageBitmap).height;
119
- assert(width + x <= this.width && height + y <= this.height);
137
+ // const {data, x = 0, y = 0} = options;
138
+ // const width = options.width ?? (data as ImageBitmap).width;
139
+ // const height = options.height ?? (data as ImageBitmap).height;
140
+ // assert(width + x <= this.width && height + y <= this.height);
120
141
  }
121
142
  }
@@ -2,7 +2,8 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {Buffer, VertexArrayProps, TypedArray} from '@luma.gl/core';
5
+ import type {TypedArray} from '@math.gl/types';
6
+ import type {Buffer, VertexArrayProps} from '@luma.gl/core';
6
7
  import {VertexArray} from '@luma.gl/core';
7
8
 
8
9
  import type {NullDevice} from '../null-device';