@luma.gl/engine 9.3.0-alpha.9 → 9.3.0

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 (63) hide show
  1. package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
  2. package/dist/animation-loop/make-animation-loop.js +1 -0
  3. package/dist/animation-loop/make-animation-loop.js.map +1 -1
  4. package/dist/compute/computation.js +2 -2
  5. package/dist/compute/computation.js.map +1 -1
  6. package/dist/debug/debug-framebuffer.d.ts +9 -4
  7. package/dist/debug/debug-framebuffer.d.ts.map +1 -1
  8. package/dist/debug/debug-framebuffer.js +91 -45
  9. package/dist/debug/debug-framebuffer.js.map +1 -1
  10. package/dist/dist.dev.js +200 -126
  11. package/dist/dist.min.js +33 -33
  12. package/dist/dynamic-texture/dynamic-texture.d.ts.map +1 -1
  13. package/dist/dynamic-texture/dynamic-texture.js +3 -1
  14. package/dist/dynamic-texture/dynamic-texture.js.map +1 -1
  15. package/dist/dynamic-texture/texture-data.js +2 -2
  16. package/dist/dynamic-texture/texture-data.js.map +1 -1
  17. package/dist/geometries/cube-geometry.js +7 -7
  18. package/dist/geometries/cube-geometry.js.map +1 -1
  19. package/dist/geometries/ico-sphere-geometry.js +3 -1
  20. package/dist/geometries/ico-sphere-geometry.js.map +1 -1
  21. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  22. package/dist/geometry/gpu-geometry.js +3 -0
  23. package/dist/geometry/gpu-geometry.js.map +1 -1
  24. package/dist/index.cjs +176 -108
  25. package/dist/index.cjs.map +3 -3
  26. package/dist/material/material.js +2 -2
  27. package/dist/material/material.js.map +1 -1
  28. package/dist/model/model.d.ts.map +1 -1
  29. package/dist/model/model.js +45 -34
  30. package/dist/model/model.js.map +1 -1
  31. package/dist/models/billboard-texture-model.js +4 -4
  32. package/dist/models/billboard-texture-module.d.ts +1 -1
  33. package/dist/models/billboard-texture-module.js +1 -1
  34. package/dist/models/light-model-utils.js +2 -2
  35. package/dist/modules/picking/color-picking.d.ts +2 -2
  36. package/dist/modules/picking/index-picking.d.ts +2 -2
  37. package/dist/modules/picking/legacy-color-picking.d.ts +4 -4
  38. package/dist/modules/picking/picking-uniforms.d.ts +1 -1
  39. package/dist/modules/picking/picking-uniforms.d.ts.map +1 -1
  40. package/dist/modules/picking/picking-uniforms.js +1 -1
  41. package/dist/modules/picking/picking.d.ts +2 -2
  42. package/dist/passes/get-fragment-shader.js +4 -4
  43. package/dist/shader-inputs.d.ts.map +1 -1
  44. package/dist/shader-inputs.js +20 -23
  45. package/dist/shader-inputs.js.map +1 -1
  46. package/package.json +2 -2
  47. package/src/animation-loop/make-animation-loop.ts +1 -0
  48. package/src/compute/computation.ts +2 -2
  49. package/src/debug/debug-framebuffer.ts +139 -61
  50. package/src/dynamic-texture/dynamic-texture.ts +3 -5
  51. package/src/dynamic-texture/texture-data.ts +2 -2
  52. package/src/dynamic-texture/texture-data.ts.disabled +1 -1
  53. package/src/geometries/cube-geometry.ts +7 -7
  54. package/src/geometries/ico-sphere-geometry.ts +3 -1
  55. package/src/geometry/gpu-geometry.ts +3 -0
  56. package/src/material/material.ts +2 -2
  57. package/src/model/model.ts +48 -36
  58. package/src/models/billboard-texture-model.ts +4 -4
  59. package/src/models/billboard-texture-module.ts +1 -1
  60. package/src/models/light-model-utils.ts +2 -2
  61. package/src/modules/picking/picking-uniforms.ts +1 -1
  62. package/src/passes/get-fragment-shader.ts +4 -4
  63. package/src/shader-inputs.ts +32 -41
@@ -50,12 +50,11 @@ export class ShaderInputs {
50
50
  this.moduleBindings = {};
51
51
  // Initialize the modules
52
52
  for (const [name, module] of Object.entries(modules)) {
53
- if (!module) {
54
- continue;
55
- }
56
- this._addModule(module);
57
- if (module.name && name !== module.name && !this.options.disableWarnings) {
58
- log.warn(`Module name: ${name} vs ${module.name}`)();
53
+ if (module) {
54
+ this._addModule(module);
55
+ if (module.name && name !== module.name && !this.options.disableWarnings) {
56
+ log.warn(`Module name: ${name} vs ${module.name}`)();
57
+ }
59
58
  }
60
59
  }
61
60
  }
@@ -74,15 +73,16 @@ export class ShaderInputs {
74
73
  if (!this.options.disableWarnings) {
75
74
  log.warn(`Module ${name} not found`)();
76
75
  }
77
- continue; // eslint-disable-line no-continue
78
76
  }
79
- const oldUniforms = this.moduleUniforms[moduleName];
80
- const oldBindings = this.moduleBindings[moduleName];
81
- const uniformsAndBindings = module.getUniforms?.(moduleProps, oldUniforms) || moduleProps;
82
- const { uniforms, bindings } = splitUniformsAndBindings(uniformsAndBindings, module.uniformTypes);
83
- this.moduleUniforms[moduleName] = mergeModuleUniforms(oldUniforms, uniforms, module.uniformTypes);
84
- this.moduleBindings[moduleName] = { ...oldBindings, ...bindings };
85
- // this.moduleUniformsChanged ||= moduleName;
77
+ else {
78
+ const oldUniforms = this.moduleUniforms[moduleName];
79
+ const oldBindings = this.moduleBindings[moduleName];
80
+ const uniformsAndBindings = module.getUniforms?.(moduleProps, oldUniforms) || moduleProps;
81
+ const { uniforms, bindings } = splitUniformsAndBindings(uniformsAndBindings, module.uniformTypes);
82
+ this.moduleUniforms[moduleName] = mergeModuleUniforms(oldUniforms, uniforms, module.uniformTypes);
83
+ this.moduleBindings[moduleName] = { ...oldBindings, ...bindings };
84
+ // this.moduleUniformsChanged ||= moduleName;
85
+ }
86
86
  // console.log(`setProps(${String(moduleName)}`, moduleName, this.moduleUniforms[moduleName])
87
87
  }
88
88
  }
@@ -129,10 +129,9 @@ export class ShaderInputs {
129
129
  function mergeModuleUniforms(currentUniforms = {}, nextUniforms = {}, uniformTypes = {}) {
130
130
  const mergedUniforms = { ...currentUniforms };
131
131
  for (const [key, value] of Object.entries(nextUniforms)) {
132
- if (value === undefined) {
133
- continue;
132
+ if (value !== undefined) {
133
+ mergedUniforms[key] = mergeModuleUniformValue(currentUniforms[key], value, uniformTypes[key]);
134
134
  }
135
- mergedUniforms[key] = mergeModuleUniformValue(currentUniforms[key], value, uniformTypes[key]);
136
135
  }
137
136
  return mergedUniforms;
138
137
  }
@@ -150,10 +149,9 @@ function mergeModuleUniformValue(currentValue, nextValue, uniformType) {
150
149
  const mergedArray = currentArray.slice();
151
150
  for (let index = 0; index < nextValue.length; index++) {
152
151
  const elementValue = nextValue[index];
153
- if (elementValue === undefined) {
154
- continue;
152
+ if (elementValue !== undefined) {
153
+ mergedArray[index] = mergeModuleUniformValue(currentArray[index], elementValue, uniformType[0]);
155
154
  }
156
- mergedArray[index] = mergeModuleUniformValue(currentArray[index], elementValue, uniformType[0]);
157
155
  }
158
156
  return mergedArray;
159
157
  }
@@ -164,10 +162,9 @@ function mergeModuleUniformValue(currentValue, nextValue, uniformType) {
164
162
  const currentObject = isPlainUniformObject(currentValue) ? currentValue : {};
165
163
  const mergedObject = { ...currentObject };
166
164
  for (const [key, value] of Object.entries(nextValue)) {
167
- if (value === undefined) {
168
- continue;
165
+ if (value !== undefined) {
166
+ mergedObject[key] = mergeModuleUniformValue(currentObject[key], value, uniformStruct[key]);
169
167
  }
170
- mergedObject[key] = mergeModuleUniformValue(currentObject[key], value, uniformStruct[key]);
171
168
  }
172
169
  return mergedObject;
173
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shader-inputs.js","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shader-inputs.js","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/engine",
3
- "version": "9.3.0-alpha.9",
3
+ "version": "9.3.0",
4
4
  "description": "3D Engine Components for luma.gl",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,5 +49,5 @@
49
49
  "@probe.gl/log": "^4.1.1",
50
50
  "@probe.gl/stats": "^4.1.1"
51
51
  },
52
- "gitHead": "737b0f752b3f8a6ae920b394d5ca028427275b37"
52
+ "gitHead": "c5e44faacd07b315a8622b5927e724f15a3d40ae"
53
53
  }
@@ -43,6 +43,7 @@ export function makeAnimationLoop(
43
43
  // Any async loading can be handled here
44
44
  return await renderLoop?.onInitialize(animationProps);
45
45
  } catch (error) {
46
+ console.error(error);
46
47
  setError(animationProps.animationLoop.device, error as Error);
47
48
  return null;
48
49
  }
@@ -240,11 +240,11 @@ export class Computation {
240
240
 
241
241
  setShaderInputs(shaderInputs: ShaderInputs): void {
242
242
  this.shaderInputs = shaderInputs;
243
- this._uniformStore = new UniformStore(this.shaderInputs.modules);
243
+ this._uniformStore = new UniformStore(this.device, this.shaderInputs.modules);
244
244
  // Create uniform buffer bindings for all modules
245
245
  for (const [moduleName, module] of Object.entries(this.shaderInputs.modules)) {
246
246
  if (shaderModuleHasUniforms(module)) {
247
- const uniformBuffer = this._uniformStore.getManagedUniformBuffer(this.device, moduleName);
247
+ const uniformBuffer = this._uniformStore.getManagedUniformBuffer(moduleName);
248
248
  this.bindings[`${moduleName}Uniforms`] = uniformBuffer;
249
249
  }
250
250
  }
@@ -2,75 +2,153 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {Framebuffer, Texture} from '@luma.gl/core';
6
- // import {copyTextureToImage} from '../debug/copy-texture-to-image';
5
+ import type {Device, Framebuffer, RenderPass, Texture} from '@luma.gl/core';
7
6
 
8
- /** Only works with 1st device? */
9
- let canvas: HTMLCanvasElement | null = null;
10
- let ctx: CanvasRenderingContext2D | null = null;
11
- // let targetImage: HTMLImageElement | null = null;
7
+ const DEBUG_FRAMEBUFFER_STATE_KEY = '__debugFramebufferState';
8
+ const DEFAULT_MARGIN_PX = 8;
12
9
 
13
- /** Debug utility to draw FBO contents onto screen */
14
- // eslint-disable-next-line
10
+ type DebugFramebufferOptions = {
11
+ id: string;
12
+ minimap?: boolean;
13
+ opaque?: boolean;
14
+ top?: string;
15
+ left?: string;
16
+ rgbaScale?: number;
17
+ };
18
+
19
+ type DebugFramebufferState = {
20
+ flushing: boolean;
21
+ queuedFramebuffers: Framebuffer[];
22
+ };
23
+
24
+ /**
25
+ * Debug utility to blit queued offscreen framebuffers into the default framebuffer
26
+ * without CPU readback. Currently implemented for WebGL only.
27
+ */
15
28
  export function debugFramebuffer(
16
- fbo: Framebuffer | Texture,
17
- {
18
- id,
19
- minimap,
20
- opaque,
21
- top = '0',
22
- left = '0',
23
- rgbaScale = 1
24
- }: {
25
- id: string;
26
- minimap?: boolean;
27
- opaque?: boolean;
28
- top?: string;
29
- left?: string;
30
- rgbaScale?: number;
29
+ renderPass: RenderPass,
30
+ source: Framebuffer | Texture | null,
31
+ options: DebugFramebufferOptions
32
+ ): void {
33
+ if (renderPass.device.type !== 'webgl') {
34
+ return;
35
+ }
36
+
37
+ const state = getDebugFramebufferState(renderPass.device);
38
+ if (state.flushing) {
39
+ return;
40
+ }
41
+
42
+ if (isDefaultRenderPass(renderPass)) {
43
+ flushDebugFramebuffers(renderPass, options, state);
44
+ return;
31
45
  }
32
- ) {
33
- if (!canvas) {
34
- canvas = document.createElement('canvas');
35
- canvas.id = id;
36
- canvas.title = id;
37
- canvas.style.zIndex = '100';
38
- canvas.style.position = 'absolute';
39
- canvas.style.top = top; // ⚠️
40
- canvas.style.left = left; // ⚠️
41
- canvas.style.border = 'blue 5px solid';
42
- canvas.style.transform = 'scaleY(-1)';
43
- document.body.appendChild(canvas);
44
-
45
- ctx = canvas.getContext('2d');
46
- // targetImage = new Image();
46
+
47
+ if (source && isFramebuffer(source) && source.handle !== null) {
48
+ if (!state.queuedFramebuffers.includes(source)) {
49
+ state.queuedFramebuffers.push(source);
50
+ }
47
51
  }
52
+ }
48
53
 
49
- // const canvasHeight = (minimap ? 2 : 1) * fbo.height;
50
- if (canvas.width !== fbo.width || canvas.height !== fbo.height) {
51
- canvas.width = fbo.width / 2;
52
- canvas.height = fbo.height / 2;
53
- canvas.style.width = '400px';
54
- canvas.style.height = '400px';
54
+ function flushDebugFramebuffers(
55
+ renderPass: RenderPass,
56
+ options: DebugFramebufferOptions,
57
+ state: DebugFramebufferState
58
+ ): void {
59
+ if (state.queuedFramebuffers.length === 0) {
60
+ return;
55
61
  }
56
62
 
57
- // const image = copyTextureToImage(fbo, {targetMaxHeight: 100, targetImage});
58
- // ctx.drawImage(image, 0, 0);
59
-
60
- const color = fbo.device.readPixelsToArrayWebGL(fbo);
61
- const imageData = ctx?.createImageData(fbo.width, fbo.height);
62
- if (imageData) {
63
- // Full map
64
- const offset = 0;
65
- // if (color.some((v) => v > 0)) {
66
- // console.error('THERE IS NON-ZERO DATA IN THE FBO!');
67
- // }
68
- for (let i = 0; i < color.length; i += 4) {
69
- imageData.data[offset + i + 0] = color[i + 0] * rgbaScale;
70
- imageData.data[offset + i + 1] = color[i + 1] * rgbaScale;
71
- imageData.data[offset + i + 2] = color[i + 2] * rgbaScale;
72
- imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3] * rgbaScale;
63
+ const webglDevice = renderPass.device as Device & {gl: WebGL2RenderingContext};
64
+ const {gl} = webglDevice;
65
+ const previousReadFramebuffer = gl.getParameter(gl.READ_FRAMEBUFFER_BINDING);
66
+ const previousDrawFramebuffer = gl.getParameter(gl.DRAW_FRAMEBUFFER_BINDING);
67
+ const [targetWidth, targetHeight] = renderPass.device
68
+ .getDefaultCanvasContext()
69
+ .getDrawingBufferSize();
70
+
71
+ let topPx = parseCssPixel(options.top, DEFAULT_MARGIN_PX);
72
+ const leftPx = parseCssPixel(options.left, DEFAULT_MARGIN_PX);
73
+
74
+ state.flushing = true;
75
+ try {
76
+ for (const framebuffer of state.queuedFramebuffers) {
77
+ const [targetX0, targetY0, targetX1, targetY1, previewHeight] = getOverlayRect({
78
+ framebuffer,
79
+ targetWidth,
80
+ targetHeight,
81
+ topPx,
82
+ leftPx,
83
+ minimap: options.minimap
84
+ });
85
+
86
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebuffer.handle as WebGLFramebuffer | null);
87
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);
88
+ gl.blitFramebuffer(
89
+ 0,
90
+ 0,
91
+ framebuffer.width,
92
+ framebuffer.height,
93
+ targetX0,
94
+ targetY0,
95
+ targetX1,
96
+ targetY1,
97
+ gl.COLOR_BUFFER_BIT,
98
+ gl.NEAREST
99
+ );
100
+
101
+ topPx += previewHeight + DEFAULT_MARGIN_PX;
73
102
  }
74
- ctx?.putImageData(imageData, 0, 0);
103
+ } finally {
104
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, previousReadFramebuffer);
105
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, previousDrawFramebuffer);
106
+ state.flushing = false;
107
+ }
108
+ }
109
+
110
+ function getOverlayRect(options: {
111
+ framebuffer: Framebuffer;
112
+ targetWidth: number;
113
+ targetHeight: number;
114
+ topPx: number;
115
+ leftPx: number;
116
+ minimap?: boolean;
117
+ }): [number, number, number, number, number] {
118
+ const {framebuffer, targetWidth, targetHeight, topPx, leftPx, minimap} = options;
119
+ const maxWidth = minimap ? Math.max(Math.floor(targetWidth / 4), 1) : targetWidth;
120
+ const maxHeight = minimap ? Math.max(Math.floor(targetHeight / 4), 1) : targetHeight;
121
+ const scale = Math.min(maxWidth / framebuffer.width, maxHeight / framebuffer.height);
122
+ const previewWidth = Math.max(Math.floor(framebuffer.width * scale), 1);
123
+ const previewHeight = Math.max(Math.floor(framebuffer.height * scale), 1);
124
+ const targetX0 = leftPx;
125
+ const targetY0 = Math.max(targetHeight - topPx - previewHeight, 0);
126
+ const targetX1 = targetX0 + previewWidth;
127
+ const targetY1 = targetY0 + previewHeight;
128
+ return [targetX0, targetY0, targetX1, targetY1, previewHeight];
129
+ }
130
+
131
+ function getDebugFramebufferState(device: Device): DebugFramebufferState {
132
+ device.userData[DEBUG_FRAMEBUFFER_STATE_KEY] ||= {
133
+ flushing: false,
134
+ queuedFramebuffers: []
135
+ } satisfies DebugFramebufferState;
136
+ return device.userData[DEBUG_FRAMEBUFFER_STATE_KEY] as DebugFramebufferState;
137
+ }
138
+
139
+ function isFramebuffer(value: Framebuffer | Texture): value is Framebuffer {
140
+ return 'colorAttachments' in value;
141
+ }
142
+
143
+ function isDefaultRenderPass(renderPass: RenderPass): boolean {
144
+ const framebuffer = renderPass.props.framebuffer as {handle?: unknown} | null;
145
+ return !framebuffer || framebuffer.handle === null;
146
+ }
147
+
148
+ function parseCssPixel(value: string | undefined, defaultValue: number): number {
149
+ if (!value) {
150
+ return defaultValue;
75
151
  }
152
+ const parsedValue = Number.parseInt(value, 10);
153
+ return Number.isFinite(parsedValue) ? parsedValue : defaultValue;
76
154
  }
@@ -18,14 +18,11 @@ import {
18
18
  // cube constants
19
19
  type TextureCubeFace,
20
20
  TEXTURE_CUBE_FACE_MAP,
21
-
22
21
  // texture slice/mip data types
23
22
  type TextureSubresource,
24
-
25
23
  // props (dimension + data)
26
24
  type TextureDataProps,
27
25
  type TextureDataAsyncProps,
28
-
29
26
  // combined data for different texture types
30
27
  type Texture1DData,
31
28
  type Texture2DData,
@@ -33,7 +30,6 @@ import {
33
30
  type TextureArrayData,
34
31
  type TextureCubeArrayData,
35
32
  type TextureCubeData,
36
-
37
33
  // Helpers
38
34
  getTextureSizeFromData,
39
35
  resolveTextureImageFormat,
@@ -116,7 +112,9 @@ export class DynamicTexture {
116
112
  return 'DynamicTexture';
117
113
  }
118
114
  toString(): string {
119
- return `DynamicTexture:"${this.id}":${this.texture.width}x${this.texture.height}px:(${this.isReady ? 'ready' : 'loading...'})`;
115
+ const width = this._texture?.width ?? this.props.width ?? '?';
116
+ const height = this._texture?.height ?? this.props.height ?? '?';
117
+ return `DynamicTexture:"${this.id}":${width}x${height}px:(${this.isReady ? 'ready' : 'loading...'})`;
120
118
  }
121
119
 
122
120
  constructor(device: Device, props: DynamicTextureProps) {
@@ -40,11 +40,11 @@ export type TextureSliceData = TextureMipLevelData | TextureMipLevelData[];
40
40
  export type TextureCubeFace = '+X' | '-X' | '+Y' | '-Y' | '+Z' | '-Z';
41
41
 
42
42
  /** Array of cube texture faces. @note: index in array is the face index */
43
- // prettier-ignore
43
+ // biome-ignore format: preserve layout
44
44
  export const TEXTURE_CUBE_FACES = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'] as const satisfies readonly TextureCubeFace[];
45
45
 
46
46
  /** Map of cube texture face names to face indexes */
47
- // prettier-ignore
47
+ // biome-ignore format: preserve layout
48
48
  export const TEXTURE_CUBE_FACE_MAP = {'+X': 0, '-X': 1, '+Y': 2, '-Y': 3, '+Z': 4, '-Z': 5} as const satisfies Record<TextureCubeFace, number>;
49
49
 
50
50
  /** @todo - Define what data type is supported for 1D textures. TextureImageData with height = 1 */
@@ -131,7 +131,7 @@ export function normalizeTextureData(
131
131
 
132
132
  /** Convert luma.gl cubemap face constants to depth index */
133
133
  export function getCubeFaceDepth(face: TextureCubeFace): number {
134
- // prettier-ignore
134
+ // biome-ignore format: preserve layout
135
135
  switch (face) {
136
136
  case '+X': return 0;
137
137
  case '-X': return 1;
@@ -35,13 +35,13 @@ export class CubeGeometry extends Geometry {
35
35
  }
36
36
  }
37
37
 
38
- // prettier-ignore
38
+ // biome-ignore format: preserve layout
39
39
  const CUBE_INDICES = new Uint16Array([
40
40
  0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13,
41
41
  14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23
42
42
  ]);
43
43
 
44
- // prettier-ignore
44
+ // biome-ignore format: preserve layout
45
45
  const CUBE_POSITIONS = new Float32Array([
46
46
  -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1,
47
47
  -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1,
@@ -52,7 +52,7 @@ const CUBE_POSITIONS = new Float32Array([
52
52
  ]);
53
53
 
54
54
  // TODO - could be Uint8
55
- // prettier-ignore
55
+ // biome-ignore format: preserve layout
56
56
  const CUBE_NORMALS = new Float32Array([
57
57
  // Front face
58
58
  0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
@@ -68,7 +68,7 @@ const CUBE_NORMALS = new Float32Array([
68
68
  -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0
69
69
  ]);
70
70
 
71
- // prettier-ignore
71
+ // biome-ignore format: preserve layout
72
72
  const CUBE_TEX_COORDS = new Float32Array([
73
73
  // Front face
74
74
  0, 0, 1, 0, 1, 1, 0, 1,
@@ -85,7 +85,7 @@ const CUBE_TEX_COORDS = new Float32Array([
85
85
  ]);
86
86
 
87
87
  // float4 position
88
- // prettier-ignore
88
+ // biome-ignore format: preserve layout
89
89
  export const CUBE_NON_INDEXED_POSITIONS = new Float32Array([
90
90
  1, -1, 1,
91
91
  -1, -1, 1,
@@ -131,7 +131,7 @@ export const CUBE_NON_INDEXED_POSITIONS = new Float32Array([
131
131
  ]);
132
132
 
133
133
  // float2 uv,
134
- // prettier-ignore
134
+ // biome-ignore format: preserve layout
135
135
  export const CUBE_NON_INDEXED_TEX_COORDS = new Float32Array([
136
136
  1, 1,
137
137
  0, 1,
@@ -177,7 +177,7 @@ export const CUBE_NON_INDEXED_TEX_COORDS = new Float32Array([
177
177
  ]);
178
178
 
179
179
  // float4 color
180
- // prettier-ignore
180
+ // biome-ignore format: preserve layout
181
181
  export const CUBE_NON_INDEXED_COLORS = new Float32Array([
182
182
  1, 0, 1, 1,
183
183
  0, 0, 1, 1,
@@ -75,7 +75,9 @@ function tesselateIcosaHedron(props: IcoSphereGeometryProps) {
75
75
 
76
76
  positions.push(xm, ym, zm);
77
77
 
78
- return (pointMemo[key] = positions.length / 3 - 1);
78
+ const pointIndex = positions.length / 3 - 1;
79
+ pointMemo[key] = pointIndex;
80
+ return pointIndex;
79
81
  };
80
82
  })();
81
83
 
@@ -117,6 +117,9 @@ export function getAttributeBuffersFromGeometry(
117
117
  case 'TEXCOORD_0':
118
118
  name = 'texCoords';
119
119
  break;
120
+ case 'TEXCOORD_1':
121
+ name = 'texCoords1';
122
+ break;
120
123
  case 'COLOR_0':
121
124
  name = 'colors';
122
125
  break;
@@ -94,11 +94,11 @@ export class Material<
94
94
  ])
95
95
  ) as {[P in keyof TModuleProps]?: ShaderModule[] extends never ? never : any};
96
96
  this.shaderInputs = props.shaderInputs || new ShaderInputs<TModuleProps>(moduleMap);
97
- this._uniformStore = new UniformStore(this.shaderInputs.modules);
97
+ this._uniformStore = new UniformStore(this.device, this.shaderInputs.modules);
98
98
 
99
99
  for (const [moduleName, module] of Object.entries(this.shaderInputs.modules)) {
100
100
  if (this.ownsModule(moduleName) && shaderModuleHasUniforms(module)) {
101
- const uniformBuffer = this._uniformStore.getManagedUniformBuffer(this.device, moduleName);
101
+ const uniformBuffer = this._uniformStore.getManagedUniformBuffer(moduleName);
102
102
  this.bindings[`${moduleName}Uniforms`] = uniformBuffer;
103
103
  }
104
104
  }