@luma.gl/engine 9.2.6 → 9.3.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/animation-loop/animation-loop.d.ts +3 -1
  2. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  3. package/dist/animation-loop/animation-loop.js +10 -4
  4. package/dist/animation-loop/animation-loop.js.map +1 -1
  5. package/dist/compute/computation.d.ts.map +1 -1
  6. package/dist/compute/computation.js +3 -2
  7. package/dist/compute/computation.js.map +1 -1
  8. package/dist/compute/swap.d.ts +2 -0
  9. package/dist/compute/swap.d.ts.map +1 -1
  10. package/dist/compute/swap.js +10 -5
  11. package/dist/compute/swap.js.map +1 -1
  12. package/dist/dist.dev.js +1251 -574
  13. package/dist/dist.min.js +216 -48
  14. package/dist/dynamic-texture/dynamic-texture.d.ts +95 -0
  15. package/dist/dynamic-texture/dynamic-texture.d.ts.map +1 -0
  16. package/dist/dynamic-texture/dynamic-texture.js +389 -0
  17. package/dist/dynamic-texture/dynamic-texture.js.map +1 -0
  18. package/dist/dynamic-texture/mipmaps.d.ts +6 -0
  19. package/dist/dynamic-texture/mipmaps.d.ts.map +1 -0
  20. package/dist/dynamic-texture/mipmaps.js +441 -0
  21. package/dist/dynamic-texture/mipmaps.js.map +1 -0
  22. package/dist/dynamic-texture/texture-data.d.ts +137 -0
  23. package/dist/dynamic-texture/texture-data.d.ts.map +1 -0
  24. package/dist/dynamic-texture/texture-data.js +183 -0
  25. package/dist/dynamic-texture/texture-data.js.map +1 -0
  26. package/dist/factories/pipeline-factory.d.ts.map +1 -1
  27. package/dist/factories/pipeline-factory.js +3 -3
  28. package/dist/factories/pipeline-factory.js.map +1 -1
  29. package/dist/factories/shader-factory.d.ts.map +1 -1
  30. package/dist/factories/shader-factory.js +3 -2
  31. package/dist/factories/shader-factory.js.map +1 -1
  32. package/dist/index.cjs +1243 -583
  33. package/dist/index.cjs.map +4 -4
  34. package/dist/index.d.ts +8 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/model/model.d.ts +31 -10
  39. package/dist/model/model.d.ts.map +1 -1
  40. package/dist/model/model.js +34 -14
  41. package/dist/model/model.js.map +1 -1
  42. package/dist/models/billboard-texture-model.d.ts +8 -5
  43. package/dist/models/billboard-texture-model.d.ts.map +1 -1
  44. package/dist/models/billboard-texture-model.js +70 -18
  45. package/dist/models/billboard-texture-model.js.map +1 -1
  46. package/dist/passes/get-fragment-shader.js +15 -11
  47. package/dist/passes/get-fragment-shader.js.map +1 -1
  48. package/dist/passes/shader-pass-renderer.d.ts +5 -5
  49. package/dist/passes/shader-pass-renderer.d.ts.map +1 -1
  50. package/dist/passes/shader-pass-renderer.js +13 -12
  51. package/dist/passes/shader-pass-renderer.js.map +1 -1
  52. package/dist/types.d.ts +7 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +5 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/utils/buffer-layout-order.d.ts.map +1 -1
  57. package/dist/utils/buffer-layout-order.js +12 -2
  58. package/dist/utils/buffer-layout-order.js.map +1 -1
  59. package/package.json +6 -6
  60. package/src/animation-loop/animation-loop.ts +11 -4
  61. package/src/compute/computation.ts +3 -2
  62. package/src/compute/swap.ts +13 -7
  63. package/src/dynamic-texture/dynamic-texture.ts +499 -0
  64. package/src/dynamic-texture/mipmaps.ts +517 -0
  65. package/src/dynamic-texture/texture-data.ts +301 -0
  66. package/src/factories/pipeline-factory.ts +4 -3
  67. package/src/factories/shader-factory.ts +4 -2
  68. package/src/index.ts +9 -4
  69. package/src/model/model.ts +37 -18
  70. package/src/models/billboard-texture-model.ts +81 -22
  71. package/src/passes/get-fragment-shader.ts +15 -11
  72. package/src/passes/shader-pass-renderer.ts +22 -16
  73. package/src/types.ts +11 -0
  74. package/src/utils/buffer-layout-order.ts +18 -2
  75. package/dist/async-texture/async-texture.d.ts +0 -166
  76. package/dist/async-texture/async-texture.d.ts.map +0 -1
  77. package/dist/async-texture/async-texture.js +0 -386
  78. package/dist/async-texture/async-texture.js.map +0 -1
  79. package/src/async-texture/async-texture.ts +0 -551
  80. /package/src/{async-texture/texture-setters.ts.disabled → dynamic-texture/texture-data.ts.disabled} +0 -0
@@ -0,0 +1,95 @@
1
+ import type { TextureProps, SamplerProps, TextureView, Device } from '@luma.gl/core';
2
+ import { Texture, Sampler } from '@luma.gl/core';
3
+ import { type TextureCubeFace, type TextureDataAsyncProps, type Texture1DData, type Texture2DData, type Texture3DData, type TextureArrayData, type TextureCubeData } from "./texture-data.js";
4
+ /**
5
+ * Properties for a dynamic texture
6
+ */
7
+ export type DynamicTextureProps = Omit<TextureProps, 'data' | 'mipLevels' | 'width' | 'height'> & TextureDataAsyncProps & {
8
+ /** Generate mipmaps after creating textures and setting data */
9
+ mipmaps?: boolean;
10
+ /** nipLevels can be set to 'auto' to generate max number of mipLevels */
11
+ mipLevels?: number | 'auto';
12
+ /** Width - can be auto-calculated when initializing from ExternalImage */
13
+ width?: number;
14
+ /** Height - can be auto-calculated when initializing from ExternalImage */
15
+ height?: number;
16
+ };
17
+ /**
18
+ * Dynamic Textures
19
+ *
20
+ * - Mipmaps - DynamicTexture can generate mipmaps for textures (WebGPU does not provide built-in mipmap generation).
21
+ *
22
+ * - Texture initialization and updates - complex textures (2d array textures, cube textures, 3d textures) need multiple images
23
+ * `DynamicTexture` provides an API that makes it easy to provide the required data.
24
+ *
25
+ * - Texture resizing - Textures are immutable in WebGPU, meaning that they cannot be resized after creation.
26
+ * DynamicTexture provides a `resize()` method that internally creates a new texture with the same parameters
27
+ * but a different size.
28
+ *
29
+ * - Async image data initialization - It is often very convenient to be able to initialize textures with promises
30
+ * returned by image or data loading functions, as it allows a callback-free linear style of programming.
31
+ *
32
+ * @note GPU Textures are quite complex objects, with many subresources and modes of usage.
33
+ * The `DynamicTexture` class allows luma.gl to provide some support for working with textures
34
+ * without accumulating excessive complexity in the core Texture class which is designed as an immutable nature of GPU resource.
35
+ */
36
+ export declare class DynamicTexture {
37
+ readonly device: Device;
38
+ readonly id: string;
39
+ /** Props with defaults resolved (except `data` which is processed separately) */
40
+ props: Readonly<Required<DynamicTextureProps>>;
41
+ /** Created resources */
42
+ private _texture;
43
+ private _sampler;
44
+ private _view;
45
+ /** Ready when GPU texture has been created and data (if any) uploaded */
46
+ readonly ready: Promise<Texture>;
47
+ isReady: boolean;
48
+ destroyed: boolean;
49
+ private resolveReady;
50
+ private rejectReady;
51
+ get texture(): Texture;
52
+ get sampler(): Sampler;
53
+ get view(): TextureView;
54
+ get [Symbol.toStringTag](): string;
55
+ toString(): string;
56
+ constructor(device: Device, props: DynamicTextureProps);
57
+ /** @note Fire and forget; caller can await `ready` */
58
+ initAsync(originalPropsWithAsyncData: TextureDataAsyncProps): Promise<void>;
59
+ destroy(): void;
60
+ generateMipmaps(): void;
61
+ /** Set sampler or create one from props */
62
+ setSampler(sampler?: Sampler | SamplerProps): void;
63
+ /**
64
+ * Resize by cloning the underlying immutable texture.
65
+ * Does not copy contents; caller may need to re-upload and/or regenerate mips.
66
+ */
67
+ resize(size: {
68
+ width: number;
69
+ height: number;
70
+ }): boolean;
71
+ /** Convert cube face label to texture slice index. Index can be used with `setTexture2DData()`. */
72
+ getCubeFaceIndex(face: TextureCubeFace): number;
73
+ /** Convert cube face label to texture slice index. Index can be used with `setTexture2DData()`. */
74
+ getCubeArrayFaceIndex(cubeIndex: number, face: TextureCubeFace): number;
75
+ /** @note experimental: Set multiple mip levels (1D) */
76
+ setTexture1DData(data: Texture1DData): void;
77
+ /** @note experimental: Set multiple mip levels (2D), optionally at `z`, slice (depth/array level) index */
78
+ setTexture2DData(lodData: Texture2DData, z?: number): void;
79
+ /** 3D: multiple depth slices, each may carry multiple mip levels */
80
+ setTexture3DData(data: Texture3DData): void;
81
+ /** 2D array: multiple layers, each may carry multiple mip levels */
82
+ setTextureArrayData(data: TextureArrayData): void;
83
+ /** Cube: 6 faces, each may carry multiple mip levels */
84
+ setTextureCubeData(data: TextureCubeData): void;
85
+ /** Cube array: multiple cubes (faces×layers), each face may carry multiple mips */
86
+ private setTextureCubeArrayData;
87
+ /** Sets multiple mip levels on different `z` slices (depth/array index) */
88
+ private _setTextureSubresources;
89
+ /** Recursively resolve all promises in data structures */
90
+ private _loadAllData;
91
+ private _checkNotDestroyed;
92
+ private _checkReady;
93
+ static defaultProps: Required<DynamicTextureProps>;
94
+ }
95
+ //# sourceMappingURL=dynamic-texture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-texture.d.ts","sourceRoot":"","sources":["../../src/dynamic-texture/dynamic-texture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,389 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+ import { Texture, Sampler, log } from '@luma.gl/core';
4
+ // import {loadImageBitmap} from '../application-utils/load-file';
5
+ import { uid } from "../utils/uid.js";
6
+ import { TEXTURE_CUBE_FACE_MAP,
7
+ // Helpers
8
+ getTextureSizeFromData, getTexture1DSubresources, getTexture2DSubresources, getTexture3DSubresources, getTextureCubeSubresources, getTextureArraySubresources, getTextureCubeArraySubresources } from "./texture-data.js";
9
+ import { generateMipmap } from "./mipmaps.js";
10
+ /**
11
+ * Dynamic Textures
12
+ *
13
+ * - Mipmaps - DynamicTexture can generate mipmaps for textures (WebGPU does not provide built-in mipmap generation).
14
+ *
15
+ * - Texture initialization and updates - complex textures (2d array textures, cube textures, 3d textures) need multiple images
16
+ * `DynamicTexture` provides an API that makes it easy to provide the required data.
17
+ *
18
+ * - Texture resizing - Textures are immutable in WebGPU, meaning that they cannot be resized after creation.
19
+ * DynamicTexture provides a `resize()` method that internally creates a new texture with the same parameters
20
+ * but a different size.
21
+ *
22
+ * - Async image data initialization - It is often very convenient to be able to initialize textures with promises
23
+ * returned by image or data loading functions, as it allows a callback-free linear style of programming.
24
+ *
25
+ * @note GPU Textures are quite complex objects, with many subresources and modes of usage.
26
+ * The `DynamicTexture` class allows luma.gl to provide some support for working with textures
27
+ * without accumulating excessive complexity in the core Texture class which is designed as an immutable nature of GPU resource.
28
+ */
29
+ export class DynamicTexture {
30
+ device;
31
+ id;
32
+ /** Props with defaults resolved (except `data` which is processed separately) */
33
+ props;
34
+ /** Created resources */
35
+ _texture = null;
36
+ _sampler = null;
37
+ _view = null;
38
+ /** Ready when GPU texture has been created and data (if any) uploaded */
39
+ ready;
40
+ isReady = false;
41
+ destroyed = false;
42
+ resolveReady = () => { };
43
+ rejectReady = () => { };
44
+ get texture() {
45
+ if (!this._texture)
46
+ throw new Error('Texture not initialized yet');
47
+ return this._texture;
48
+ }
49
+ get sampler() {
50
+ if (!this._sampler)
51
+ throw new Error('Sampler not initialized yet');
52
+ return this._sampler;
53
+ }
54
+ get view() {
55
+ if (!this._view)
56
+ throw new Error('View not initialized yet');
57
+ return this._view;
58
+ }
59
+ get [Symbol.toStringTag]() {
60
+ return 'DynamicTexture';
61
+ }
62
+ toString() {
63
+ return `DynamicTexture:"${this.id}":${this.texture.width}x${this.texture.height}px:(${this.isReady ? 'ready' : 'loading...'})`;
64
+ }
65
+ constructor(device, props) {
66
+ this.device = device;
67
+ const id = uid('dynamic-texture');
68
+ // NOTE: We avoid holding on to data to make sure it can be garbage collected.
69
+ const originalPropsWithAsyncData = props;
70
+ this.props = { ...DynamicTexture.defaultProps, id, ...props, data: null };
71
+ this.id = this.props.id;
72
+ this.ready = new Promise((resolve, reject) => {
73
+ this.resolveReady = resolve;
74
+ this.rejectReady = reject;
75
+ });
76
+ this.initAsync(originalPropsWithAsyncData);
77
+ }
78
+ /** @note Fire and forget; caller can await `ready` */
79
+ async initAsync(originalPropsWithAsyncData) {
80
+ try {
81
+ // TODO - Accept URL string for 2D: turn into ExternalImage promise
82
+ // const dataProps =
83
+ // typeof props.data === 'string' && (props.dimension ?? '2d') === '2d'
84
+ // ? ({dimension: '2d', data: loadImageBitmap(props.data)} as const)
85
+ // : {};
86
+ const propsWithSyncData = await this._loadAllData(originalPropsWithAsyncData);
87
+ this._checkNotDestroyed();
88
+ // Deduce size when not explicitly provided
89
+ // TODO - what about depth?
90
+ const deduceSize = () => {
91
+ if (this.props.width && this.props.height) {
92
+ return { width: this.props.width, height: this.props.height };
93
+ }
94
+ const size = getTextureSizeFromData(propsWithSyncData);
95
+ if (size) {
96
+ return size;
97
+ }
98
+ return { width: this.props.width || 1, height: this.props.height || 1 };
99
+ };
100
+ const size = deduceSize();
101
+ if (!size || size.width <= 0 || size.height <= 0) {
102
+ throw new Error(`${this} size could not be determined or was zero`);
103
+ }
104
+ // Create a minimal TextureProps and validate via `satisfies`
105
+ const baseTextureProps = {
106
+ ...this.props,
107
+ ...size,
108
+ mipLevels: 1, // temporary; updated below
109
+ data: undefined
110
+ };
111
+ if (this.device.type === 'webgpu' && this.props.mipmaps) {
112
+ const requiredUsage = this.props.dimension === '3d'
113
+ ? Texture.SAMPLE | Texture.STORAGE | Texture.COPY_DST | Texture.COPY_SRC
114
+ : Texture.SAMPLE | Texture.RENDER | Texture.COPY_DST | Texture.COPY_SRC;
115
+ baseTextureProps.usage |= requiredUsage;
116
+ }
117
+ // Compute mip levels (auto clamps to max)
118
+ const maxMips = this.device.getMipLevelCount(baseTextureProps.width, baseTextureProps.height);
119
+ const desired = this.props.mipLevels === 'auto'
120
+ ? maxMips
121
+ : Math.max(1, Math.min(maxMips, this.props.mipLevels ?? 1));
122
+ const finalTextureProps = { ...baseTextureProps, mipLevels: desired };
123
+ this._texture = this.device.createTexture(finalTextureProps);
124
+ this._sampler = this.texture.sampler;
125
+ this._view = this.texture.view;
126
+ // Upload data if provided
127
+ if (propsWithSyncData.data) {
128
+ switch (propsWithSyncData.dimension) {
129
+ case '1d':
130
+ this.setTexture1DData(propsWithSyncData.data);
131
+ break;
132
+ case '2d':
133
+ this.setTexture2DData(propsWithSyncData.data);
134
+ break;
135
+ case '3d':
136
+ this.setTexture3DData(propsWithSyncData.data);
137
+ break;
138
+ case '2d-array':
139
+ this.setTextureArrayData(propsWithSyncData.data);
140
+ break;
141
+ case 'cube':
142
+ this.setTextureCubeData(propsWithSyncData.data);
143
+ break;
144
+ case 'cube-array':
145
+ this.setTextureCubeArrayData(propsWithSyncData.data);
146
+ break;
147
+ default: {
148
+ throw new Error(`Unhandled dimension ${propsWithSyncData.dimension}`);
149
+ }
150
+ }
151
+ }
152
+ if (this.props.mipmaps) {
153
+ this.generateMipmaps();
154
+ }
155
+ this.isReady = true;
156
+ this.resolveReady(this.texture);
157
+ log.info(0, `${this} created`)();
158
+ }
159
+ catch (e) {
160
+ const err = e instanceof Error ? e : new Error(String(e));
161
+ this.rejectReady(err);
162
+ throw err;
163
+ }
164
+ }
165
+ destroy() {
166
+ if (this._texture) {
167
+ this._texture.destroy();
168
+ this._texture = null;
169
+ this._sampler = null;
170
+ this._view = null;
171
+ }
172
+ this.destroyed = true;
173
+ }
174
+ generateMipmaps() {
175
+ if (this.device.type === 'webgl') {
176
+ this.texture.generateMipmapsWebGL();
177
+ }
178
+ else if (this.device.type === 'webgpu') {
179
+ generateMipmap(this.device, this.texture);
180
+ }
181
+ else {
182
+ log.warn(`${this} mipmaps not supported on ${this.device.type}`);
183
+ }
184
+ }
185
+ /** Set sampler or create one from props */
186
+ setSampler(sampler = {}) {
187
+ this._checkReady();
188
+ const s = sampler instanceof Sampler ? sampler : this.device.createSampler(sampler);
189
+ this.texture.setSampler(s);
190
+ this._sampler = s;
191
+ }
192
+ /**
193
+ * Resize by cloning the underlying immutable texture.
194
+ * Does not copy contents; caller may need to re-upload and/or regenerate mips.
195
+ */
196
+ resize(size) {
197
+ this._checkReady();
198
+ if (size.width === this.texture.width && size.height === this.texture.height) {
199
+ return false;
200
+ }
201
+ const prev = this.texture;
202
+ this._texture = prev.clone(size);
203
+ this._sampler = this.texture.sampler;
204
+ this._view = this.texture.view;
205
+ prev.destroy();
206
+ log.info(`${this} resized`);
207
+ return true;
208
+ }
209
+ /** Convert cube face label to texture slice index. Index can be used with `setTexture2DData()`. */
210
+ getCubeFaceIndex(face) {
211
+ const index = TEXTURE_CUBE_FACE_MAP[face];
212
+ if (index === undefined)
213
+ throw new Error(`Invalid cube face: ${face}`);
214
+ return index;
215
+ }
216
+ /** Convert cube face label to texture slice index. Index can be used with `setTexture2DData()`. */
217
+ getCubeArrayFaceIndex(cubeIndex, face) {
218
+ return 6 * cubeIndex + this.getCubeFaceIndex(face);
219
+ }
220
+ /** @note experimental: Set multiple mip levels (1D) */
221
+ setTexture1DData(data) {
222
+ this._checkReady();
223
+ if (this.texture.props.dimension !== '1d') {
224
+ throw new Error(`${this} is not 1d`);
225
+ }
226
+ const subresources = getTexture1DSubresources(data);
227
+ this._setTextureSubresources(subresources);
228
+ }
229
+ /** @note experimental: Set multiple mip levels (2D), optionally at `z`, slice (depth/array level) index */
230
+ setTexture2DData(lodData, z = 0) {
231
+ this._checkReady();
232
+ if (this.texture.props.dimension !== '2d') {
233
+ throw new Error(`${this} is not 2d`);
234
+ }
235
+ const subresources = getTexture2DSubresources(z, lodData);
236
+ this._setTextureSubresources(subresources);
237
+ }
238
+ /** 3D: multiple depth slices, each may carry multiple mip levels */
239
+ setTexture3DData(data) {
240
+ if (this.texture.props.dimension !== '3d') {
241
+ throw new Error(`${this} is not 3d`);
242
+ }
243
+ const subresources = getTexture3DSubresources(data);
244
+ this._setTextureSubresources(subresources);
245
+ }
246
+ /** 2D array: multiple layers, each may carry multiple mip levels */
247
+ setTextureArrayData(data) {
248
+ if (this.texture.props.dimension !== '2d-array') {
249
+ throw new Error(`${this} is not 2d-array`);
250
+ }
251
+ const subresources = getTextureArraySubresources(data);
252
+ this._setTextureSubresources(subresources);
253
+ }
254
+ /** Cube: 6 faces, each may carry multiple mip levels */
255
+ setTextureCubeData(data) {
256
+ if (this.texture.props.dimension !== 'cube') {
257
+ throw new Error(`${this} is not cube`);
258
+ }
259
+ const subresources = getTextureCubeSubresources(data);
260
+ this._setTextureSubresources(subresources);
261
+ }
262
+ /** Cube array: multiple cubes (faces×layers), each face may carry multiple mips */
263
+ setTextureCubeArrayData(data) {
264
+ if (this.texture.props.dimension !== 'cube-array') {
265
+ throw new Error(`${this} is not cube-array`);
266
+ }
267
+ const subresources = getTextureCubeArraySubresources(data);
268
+ this._setTextureSubresources(subresources);
269
+ }
270
+ /** Sets multiple mip levels on different `z` slices (depth/array index) */
271
+ _setTextureSubresources(subresources) {
272
+ // If user supplied multiple mip levels, warn if auto-mips also requested
273
+ // if (lodArray.length > 1 && this.props.mipmaps !== false) {
274
+ // log.warn(
275
+ // `Texture ${this.id}: provided multiple LODs and also requested mipmap generation.`
276
+ // )();
277
+ // }
278
+ for (const subresource of subresources) {
279
+ const { z, mipLevel } = subresource;
280
+ switch (subresource.type) {
281
+ case 'external-image':
282
+ const { image, flipY } = subresource;
283
+ this.texture.copyExternalImage({ image, z, mipLevel, flipY });
284
+ break;
285
+ case 'texture-data':
286
+ const { data } = subresource;
287
+ // TODO - we are throwing away some of the info in data.
288
+ // Did we not need it in the first place? Can we use it to validate?
289
+ this.texture.writeData(getAlignedUploadData(this.texture, data), {
290
+ x: 0,
291
+ y: 0,
292
+ z,
293
+ width: data.width,
294
+ height: data.height,
295
+ depthOrArrayLayers: 1,
296
+ mipLevel
297
+ });
298
+ break;
299
+ default:
300
+ throw new Error('Unsupported 2D mip-level payload');
301
+ }
302
+ }
303
+ }
304
+ // ------------------ helpers ------------------
305
+ /** Recursively resolve all promises in data structures */
306
+ async _loadAllData(props) {
307
+ const syncData = await awaitAllPromises(props.data);
308
+ const dimension = (props.dimension ?? '2d');
309
+ return { dimension, data: syncData ?? null };
310
+ }
311
+ _checkNotDestroyed() {
312
+ if (this.destroyed) {
313
+ log.warn(`${this} already destroyed`);
314
+ }
315
+ }
316
+ _checkReady() {
317
+ if (!this.isReady) {
318
+ log.warn(`${this} Cannot perform this operation before ready`);
319
+ }
320
+ }
321
+ static defaultProps = {
322
+ ...Texture.defaultProps,
323
+ dimension: '2d',
324
+ data: null,
325
+ mipmaps: false
326
+ };
327
+ }
328
+ function getAlignedUploadData(texture, data) {
329
+ const { width, height, data: uploadData } = data;
330
+ const { bytesPerPixel } = texture.device.getTextureFormatInfo(texture.format);
331
+ const bytesPerRow = width * bytesPerPixel;
332
+ const alignedBytesPerRow = Math.ceil(bytesPerRow / texture.byteAlignment) * texture.byteAlignment;
333
+ if (alignedBytesPerRow === bytesPerRow) {
334
+ return uploadData;
335
+ }
336
+ const sourceBytes = new Uint8Array(uploadData.buffer, uploadData.byteOffset, uploadData.byteLength);
337
+ const paddedBytes = new Uint8Array(alignedBytesPerRow * height);
338
+ for (let row = 0; row < height; row++) {
339
+ const sourceOffset = row * bytesPerRow;
340
+ const destinationOffset = row * alignedBytesPerRow;
341
+ paddedBytes.set(sourceBytes.subarray(sourceOffset, sourceOffset + bytesPerRow), destinationOffset);
342
+ }
343
+ return paddedBytes;
344
+ }
345
+ // HELPERS
346
+ /** Resolve all promises in a nested data structure */
347
+ async function awaitAllPromises(x) {
348
+ x = await x;
349
+ if (Array.isArray(x)) {
350
+ return await Promise.all(x.map(awaitAllPromises));
351
+ }
352
+ if (x && typeof x === 'object' && x.constructor === Object) {
353
+ const object = x;
354
+ const values = await Promise.all(Object.values(object));
355
+ const keys = Object.keys(object);
356
+ const resolvedObject = {};
357
+ for (let i = 0; i < keys.length; i++) {
358
+ resolvedObject[keys[i]] = values[i];
359
+ }
360
+ return resolvedObject;
361
+ }
362
+ return x;
363
+ }
364
+ // /** @note experimental: Set multiple mip levels (2D), optionally at `z`, slice (depth/array level) index */
365
+ // setTexture2DData(lodData: Texture2DData, z: number = 0): void {
366
+ // this._checkReady();
367
+ // const lodArray = this._normalizeTexture2DData(lodData);
368
+ // // If user supplied multiple mip levels, warn if auto-mips also requested
369
+ // if (lodArray.length > 1 && this.props.mipmaps !== false) {
370
+ // log.warn(
371
+ // `Texture ${this.id}: provided multiple LODs and also requested mipmap generation.`
372
+ // )();
373
+ // }
374
+ // for (let mipLevel = 0; mipLevel < lodArray.length; mipLevel++) {
375
+ // const imageData = lodArray[mipLevel];
376
+ // if (this.device.isExternalImage(imageData)) {
377
+ // this.texture.copyExternalImage({image: imageData, z, mipLevel, flipY: true});
378
+ // } else if (this._isTextureImageData(imageData)) {
379
+ // this.texture.copyImageData({data: imageData.data, z, mipLevel});
380
+ // } else {
381
+ // throw new Error('Unsupported 2D mip-level payload');
382
+ // }
383
+ // }
384
+ // }
385
+ // /** Normalize 2D layer payload into an array of mip-level items */
386
+ // private _normalizeTexture2DData(data: Texture2DData): (TextureImageData | ExternalImage)[] {
387
+ // return Array.isArray(data) ? data : [data];
388
+ // }
389
+ //# sourceMappingURL=dynamic-texture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-texture.js","sourceRoot":"","sources":["../../src/dynamic-texture/dynamic-texture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Device, Texture } from '@luma.gl/core';
2
+ /**
3
+ * Generates mip levels from level 0 to the last mip for an existing texture.
4
+ */
5
+ export declare function generateMipmap(device: Device, texture: Texture): void;
6
+ //# sourceMappingURL=mipmaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mipmaps.d.ts","sourceRoot":"","sources":["../../src/dynamic-texture/mipmaps.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,MAAM,EAAE,OAAO,EAAoC,MAAM,eAAe,CAAC;AAsBtF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBrE"}