@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
@@ -1,386 +0,0 @@
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.js";
5
- import { uid } from "../utils/uid.js";
6
- export const TextureCubeFaces = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];
7
- // prettier-ignore
8
- export const TextureCubeFaceMap = { '+X': 0, '-X': 1, '+Y': 2, '-Y': 3, '+Z': 4, '-Z': 5 };
9
- export const CubeFaces = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];
10
- /**
11
- * It is very convenient to be able to initialize textures with promises
12
- * This can add considerable complexity to the Texture class, and doesn't
13
- * fit with the immutable nature of WebGPU resources.
14
- * Instead, luma.gl offers async textures as a separate class.
15
- */
16
- export class AsyncTexture {
17
- device;
18
- id;
19
- props;
20
- // TODO - should we type these as possibly `null`? It will make usage harder?
21
- // @ts-expect-error
22
- texture;
23
- // @ts-expect-error
24
- sampler;
25
- // @ts-expect-error
26
- view;
27
- ready;
28
- isReady = false;
29
- destroyed = false;
30
- resolveReady = () => { };
31
- rejectReady = () => { };
32
- get [Symbol.toStringTag]() {
33
- return 'AsyncTexture';
34
- }
35
- toString() {
36
- return `AsyncTexture:"${this.id}"(${this.isReady ? 'ready' : 'loading'})`;
37
- }
38
- constructor(device, props) {
39
- this.device = device;
40
- // TODO - if we support URL strings as data...
41
- const id = uid('async-texture'); // typeof props?.data === 'string' ? props.data.slice(-20) : uid('async-texture');
42
- this.props = { ...AsyncTexture.defaultProps, id, ...props };
43
- this.id = this.props.id;
44
- props = { ...props };
45
- // Signature: new AsyncTexture(device, {data: url})
46
- if (typeof props?.data === 'string' && props.dimension === '2d') {
47
- props.data = loadImageBitmap(props.data);
48
- }
49
- // If mipmaps are requested, we need to allocate space for them
50
- if (props.mipmaps) {
51
- props.mipLevels = 'auto';
52
- }
53
- this.ready = new Promise((resolve, reject) => {
54
- this.resolveReady = () => {
55
- this.isReady = true;
56
- resolve();
57
- };
58
- this.rejectReady = reject;
59
- });
60
- this.initAsync(props);
61
- }
62
- async initAsync(props) {
63
- const asyncData = props.data;
64
- // @ts-expect-error not clear how to convince TS that null will be returned
65
- const data = await awaitAllPromises(asyncData).then(undefined, this.rejectReady);
66
- // Check that we haven't been destroyed while waiting for texture data to load
67
- if (this.destroyed) {
68
- return;
69
- }
70
- // Now we can actually create the texture
71
- // Auto-deduce width and height if not supplied
72
- const size = this.props.width && this.props.height
73
- ? { width: this.props.width, height: this.props.height }
74
- : this.getTextureDataSize(data);
75
- if (!size) {
76
- throw new Error('Texture size could not be determined');
77
- }
78
- const syncProps = { ...size, ...props, data: undefined, mipLevels: 1 };
79
- // Auto-calculate the number of mip levels as a convenience
80
- // TODO - Should we clamp to 1-getMipLevelCount?
81
- const maxMips = this.device.getMipLevelCount(syncProps.width, syncProps.height);
82
- syncProps.mipLevels =
83
- this.props.mipLevels === 'auto' ? maxMips : Math.min(maxMips, this.props.mipLevels);
84
- this.texture = this.device.createTexture(syncProps);
85
- this.sampler = this.texture.sampler;
86
- this.view = this.texture.view;
87
- if (props.data) {
88
- switch (this.props.dimension) {
89
- case '1d':
90
- this._setTexture1DData(this.texture, data);
91
- break;
92
- case '2d':
93
- this._setTexture2DData(data);
94
- break;
95
- case '3d':
96
- this._setTexture3DData(this.texture, data);
97
- break;
98
- case '2d-array':
99
- this._setTextureArrayData(this.texture, data);
100
- break;
101
- case 'cube':
102
- this._setTextureCubeData(this.texture, data);
103
- break;
104
- case 'cube-array':
105
- this._setTextureCubeArrayData(this.texture, data);
106
- break;
107
- }
108
- }
109
- // Do we need to generate mipmaps?
110
- if (this.props.mipmaps) {
111
- this.generateMipmaps();
112
- }
113
- log.info(1, `${this} loaded`);
114
- this.resolveReady();
115
- }
116
- destroy() {
117
- if (this.texture) {
118
- this.texture.destroy();
119
- // @ts-expect-error
120
- this.texture = null;
121
- }
122
- this.destroyed = true;
123
- }
124
- generateMipmaps() {
125
- // if (this.device.type === 'webgl') {
126
- this.texture.generateMipmapsWebGL();
127
- // }
128
- }
129
- /** Set sampler or create and set new Sampler from SamplerProps */
130
- setSampler(sampler = {}) {
131
- this.texture.setSampler(sampler instanceof Sampler ? sampler : this.device.createSampler(sampler));
132
- }
133
- /**
134
- * Textures are immutable and cannot be resized after creation,
135
- * but we can create a similar texture with the same parameters but a new size.
136
- * @note Does not copy contents of the texture
137
- * @note Mipmaps may need to be regenerated after resizing / setting new data
138
- * @todo Abort pending promise and create a texture with the new size?
139
- */
140
- resize(size) {
141
- if (!this.isReady) {
142
- throw new Error('Cannot resize texture before it is ready');
143
- }
144
- if (size.width === this.texture.width && size.height === this.texture.height) {
145
- return false;
146
- }
147
- if (this.texture) {
148
- const texture = this.texture;
149
- this.texture = texture.clone(size);
150
- texture.destroy();
151
- }
152
- return true;
153
- }
154
- /** Check if texture data is a typed array */
155
- isTextureLevelData(data) {
156
- const typedArray = data?.data;
157
- return ArrayBuffer.isView(typedArray);
158
- }
159
- /** Get the size of the texture described by the provided TextureData */
160
- getTextureDataSize(data) {
161
- if (!data) {
162
- return null;
163
- }
164
- if (ArrayBuffer.isView(data)) {
165
- return null;
166
- }
167
- // Recurse into arrays (array of miplevels)
168
- if (Array.isArray(data)) {
169
- return this.getTextureDataSize(data[0]);
170
- }
171
- if (this.device.isExternalImage(data)) {
172
- return this.device.getExternalImageSize(data);
173
- }
174
- if (data && typeof data === 'object' && data.constructor === Object) {
175
- const textureDataArray = Object.values(data);
176
- const untypedData = textureDataArray[0];
177
- return { width: untypedData.width, height: untypedData.height };
178
- }
179
- throw new Error('texture size deduction failed');
180
- }
181
- /** Convert luma.gl cubemap face constants to depth index */
182
- getCubeFaceDepth(face) {
183
- // prettier-ignore
184
- switch (face) {
185
- case '+X': return 0;
186
- case '-X': return 1;
187
- case '+Y': return 2;
188
- case '-Y': return 3;
189
- case '+Z': return 4;
190
- case '-Z': return 5;
191
- default: throw new Error(face);
192
- }
193
- }
194
- // EXPERIMENTAL
195
- setTextureData(data) { }
196
- /** Experimental: Set multiple mip levels */
197
- _setTexture1DData(texture, data) {
198
- throw new Error('setTexture1DData not supported in WebGL.');
199
- }
200
- /** Experimental: Set multiple mip levels */
201
- _setTexture2DData(lodData, depth = 0) {
202
- if (!this.texture) {
203
- throw new Error('Texture not initialized');
204
- }
205
- const lodArray = this._normalizeTextureData(lodData);
206
- // If the user provides multiple LODs, then automatic mipmap
207
- // generation generateMipmap() should be disabled to avoid overwriting them.
208
- if (lodArray.length > 1 && this.props.mipmaps !== false) {
209
- log.warn(`Texture ${this.id} mipmap and multiple LODs.`)();
210
- }
211
- for (let mipLevel = 0; mipLevel < lodArray.length; mipLevel++) {
212
- const imageData = lodArray[mipLevel];
213
- if (this.device.isExternalImage(imageData)) {
214
- this.texture.copyExternalImage({ image: imageData, depth, mipLevel, flipY: true });
215
- }
216
- else {
217
- this.texture.copyImageData({ data: imageData.data /* , depth */, mipLevel });
218
- }
219
- }
220
- }
221
- /**
222
- * Experimental: Sets 3D texture data: multiple depth slices, multiple mip levels
223
- * @param data
224
- */
225
- _setTexture3DData(texture, data) {
226
- if (this.texture?.props.dimension !== '3d') {
227
- throw new Error(this.id);
228
- }
229
- for (let depth = 0; depth < data.length; depth++) {
230
- this._setTexture2DData(data[depth], depth);
231
- }
232
- }
233
- /**
234
- * Experimental: Set Cube texture data, multiple faces, multiple mip levels
235
- * @todo - could support TextureCubeArray with depth
236
- * @param data
237
- * @param index
238
- */
239
- _setTextureCubeData(texture, data) {
240
- if (this.texture?.props.dimension !== 'cube') {
241
- throw new Error(this.id);
242
- }
243
- for (const [face, faceData] of Object.entries(data)) {
244
- const faceDepth = CubeFaces.indexOf(face);
245
- this._setTexture2DData(faceData, faceDepth);
246
- }
247
- }
248
- /**
249
- * Experimental: Sets texture array data, multiple levels, multiple depth slices
250
- * @param data
251
- */
252
- _setTextureArrayData(texture, data) {
253
- if (this.texture?.props.dimension !== '2d-array') {
254
- throw new Error(this.id);
255
- }
256
- for (let depth = 0; depth < data.length; depth++) {
257
- this._setTexture2DData(data[depth], depth);
258
- }
259
- }
260
- /**
261
- * Experimental: Sets texture cube array, multiple faces, multiple levels, multiple mip levels
262
- * @param data
263
- */
264
- _setTextureCubeArrayData(texture, data) {
265
- throw new Error('setTextureCubeArrayData not supported in WebGL2.');
266
- }
267
- /** Experimental */
268
- _setTextureCubeFaceData(texture, lodData, face, depth = 0) {
269
- // assert(this.props.dimension === 'cube');
270
- // If the user provides multiple LODs, then automatic mipmap
271
- // generation generateMipmap() should be disabled to avoid overwriting them.
272
- if (Array.isArray(lodData) && lodData.length > 1 && this.props.mipmaps !== false) {
273
- log.warn(`${this.id} has mipmap and multiple LODs.`)();
274
- }
275
- const faceDepth = TextureCubeFaces.indexOf(face);
276
- this._setTexture2DData(lodData, faceDepth);
277
- }
278
- /**
279
- * Normalize TextureData to an array of TextureImageData / ExternalImages
280
- * @param data
281
- * @param options
282
- * @returns array of TextureImageData / ExternalImages
283
- */
284
- _normalizeTextureData(data) {
285
- const options = this.texture;
286
- let mipLevelArray;
287
- if (ArrayBuffer.isView(data)) {
288
- mipLevelArray = [
289
- {
290
- // ts-expect-error does data really need to be Uint8ClampedArray?
291
- data,
292
- width: options.width,
293
- height: options.height
294
- // depth: options.depth
295
- }
296
- ];
297
- }
298
- else if (!Array.isArray(data)) {
299
- mipLevelArray = [data];
300
- }
301
- else {
302
- mipLevelArray = data;
303
- }
304
- return mipLevelArray;
305
- }
306
- static defaultProps = {
307
- ...Texture.defaultProps,
308
- data: null,
309
- mipmaps: false
310
- };
311
- }
312
- // TODO - Remove when texture refactor is complete
313
- /*
314
- setCubeMapData(options: {
315
- width: number;
316
- height: number;
317
- data: Record<GL, Texture2DData> | Record<TextureCubeFace, Texture2DData>;
318
- format?: any;
319
- type?: any;
320
- /** @deprecated Use .data *
321
- pixels: any;
322
- }): void {
323
- const {gl} = this;
324
-
325
- const {width, height, pixels, data, format = GL.RGBA, type = GL.UNSIGNED_BYTE} = options;
326
-
327
- // pixel data (imageDataMap) is an Object from Face to Image or Promise.
328
- // For example:
329
- // {
330
- // GL.TEXTURE_CUBE_MAP_POSITIVE_X : Image-or-Promise,
331
- // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : Image-or-Promise,
332
- // ... }
333
- // To provide multiple level-of-details (LODs) this can be Face to Array
334
- // of Image or Promise, like this
335
- // {
336
- // GL.TEXTURE_CUBE_MAP_POSITIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],
337
- // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],
338
- // ... }
339
-
340
- const imageDataMap = this._getImageDataMap(pixels || data);
341
-
342
- const resolvedFaces = WEBGLTexture.FACES.map(face => {
343
- const facePixels = imageDataMap[face];
344
- return Array.isArray(facePixels) ? facePixels : [facePixels];
345
- });
346
- this.bind();
347
-
348
- WEBGLTexture.FACES.forEach((face, index) => {
349
- if (resolvedFaces[index].length > 1 && this.props.mipmaps !== false) {
350
- // If the user provides multiple LODs, then automatic mipmap
351
- // generation generateMipmaps() should be disabled to avoid overwritting them.
352
- log.warn(`${this.id} has mipmap and multiple LODs.`)();
353
- }
354
- resolvedFaces[index].forEach((image, lodLevel) => {
355
- // TODO: adjust width & height for LOD!
356
- if (width && height) {
357
- gl.texImage2D(face, lodLevel, format, width, height, 0 /* border*, format, type, image);
358
- } else {
359
- gl.texImage2D(face, lodLevel, format, format, type, image);
360
- }
361
- });
362
- });
363
-
364
- this.unbind();
365
- }
366
- */
367
- // HELPERS
368
- /** Resolve all promises in a nested data structure */
369
- async function awaitAllPromises(x) {
370
- x = await x;
371
- if (Array.isArray(x)) {
372
- return await Promise.all(x.map(awaitAllPromises));
373
- }
374
- if (x && typeof x === 'object' && x.constructor === Object) {
375
- const object = x;
376
- const values = await Promise.all(Object.values(object));
377
- const keys = Object.keys(object);
378
- const resolvedObject = {};
379
- for (let i = 0; i < keys.length; i++) {
380
- resolvedObject[keys[i]] = values[i];
381
- }
382
- return resolvedObject;
383
- }
384
- return x;
385
- }
386
- //# sourceMappingURL=async-texture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"async-texture.js","sourceRoot":"","sources":["../../src/async-texture/async-texture.ts"],"names":[],"mappings":"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"}