@luma.gl/core 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/adapter/device.d.ts +1 -1
  2. package/dist/adapter/device.d.ts.map +1 -1
  3. package/dist/adapter/device.js +3 -2
  4. package/dist/adapter/device.js.map +1 -1
  5. package/dist/adapter/luma.d.ts.map +1 -1
  6. package/dist/adapter/luma.js +2 -1
  7. package/dist/adapter/luma.js.map +1 -1
  8. package/dist/dist.dev.js +328 -173
  9. package/dist/dist.min.js +5 -5
  10. package/dist/factories/bind-group-factory.d.ts.map +1 -1
  11. package/dist/factories/bind-group-factory.js +14 -5
  12. package/dist/factories/bind-group-factory.js.map +1 -1
  13. package/dist/index.cjs +317 -173
  14. package/dist/index.cjs.map +4 -4
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/portable/shader-block-writer.d.ts +51 -0
  20. package/dist/portable/shader-block-writer.d.ts.map +1 -0
  21. package/dist/portable/shader-block-writer.js +185 -0
  22. package/dist/portable/shader-block-writer.js.map +1 -0
  23. package/dist/portable/uniform-store.d.ts +52 -20
  24. package/dist/portable/uniform-store.d.ts.map +1 -1
  25. package/dist/portable/uniform-store.js +71 -26
  26. package/dist/portable/uniform-store.js.map +1 -1
  27. package/dist/shadertypes/data-types/data-type-decoder.js +2 -2
  28. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -1
  29. package/dist/shadertypes/data-types/decode-data-types.js +2 -2
  30. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
  31. package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
  32. package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
  33. package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
  34. package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
  35. package/dist/shadertypes/texture-types/texture-format-decoder.js +1 -1
  36. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -1
  37. package/dist/shadertypes/texture-types/texture-format-table.js +2 -2
  38. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -1
  39. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -1
  40. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +41 -3
  41. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -1
  42. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +6 -6
  43. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -1
  44. package/package.json +2 -2
  45. package/src/adapter/device.ts +4 -2
  46. package/src/adapter/luma.ts +1 -0
  47. package/src/factories/bind-group-factory.ts +23 -5
  48. package/src/index.ts +7 -1
  49. package/src/portable/shader-block-writer.ts +254 -0
  50. package/src/portable/uniform-store.ts +92 -37
  51. package/src/shadertypes/data-types/data-type-decoder.ts +2 -2
  52. package/src/shadertypes/data-types/decode-data-types.ts +2 -2
  53. package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
  54. package/src/shadertypes/shader-types/shader-types.ts +5 -5
  55. package/src/shadertypes/texture-types/texture-format-decoder.ts +1 -1
  56. package/src/shadertypes/texture-types/texture-format-table.ts +2 -2
  57. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +47 -3
  58. package/src/shadertypes/vertex-types/vertex-formats.ts +18 -5
  59. package/dist/portable/uniform-buffer-layout.d.ts +0 -42
  60. package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
  61. package/dist/portable/uniform-buffer-layout.js +0 -274
  62. package/dist/portable/uniform-buffer-layout.js.map +0 -1
  63. package/src/portable/uniform-buffer-layout.ts +0 -384
package/dist/index.d.ts CHANGED
@@ -45,7 +45,8 @@ export { QuerySet } from "./adapter/resources/query-set.js";
45
45
  export { Fence, type FenceProps } from "./adapter/resources/fence.js";
46
46
  export type { PipelineLayoutProps } from "./adapter/resources/pipeline-layout.js";
47
47
  export { PipelineLayout } from "./adapter/resources/pipeline-layout.js";
48
- export { UniformBufferLayout } from "./portable/uniform-buffer-layout.js";
48
+ export { makeShaderBlockLayout, type ShaderBlockLayout, type ShaderBlockLayoutEntry, type ShaderBlockLayoutOptions } from "./shadertypes/shader-types/shader-block-layout.js";
49
+ export { ShaderBlockWriter } from "./portable/shader-block-writer.js";
49
50
  export { UniformBlock } from "./portable/uniform-block.js";
50
51
  export { UniformStore } from "./portable/uniform-store.js";
51
52
  export type { CompilerMessage } from "./adapter/types/compiler-message.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -32,7 +32,8 @@ export { QuerySet } from "./adapter/resources/query-set.js";
32
32
  export { Fence } from "./adapter/resources/fence.js";
33
33
  export { PipelineLayout } from "./adapter/resources/pipeline-layout.js";
34
34
  // PORTABLE API - UNIFORM BUFFERS
35
- export { UniformBufferLayout } from "./portable/uniform-buffer-layout.js";
35
+ export { makeShaderBlockLayout } from "./shadertypes/shader-types/shader-block-layout.js";
36
+ export { ShaderBlockWriter } from "./portable/shader-block-writer.js";
36
37
  export { UniformBlock } from "./portable/uniform-block.js";
37
38
  export { UniformStore } from "./portable/uniform-store.js";
38
39
  export { dataTypeDecoder } from "./shadertypes/data-types/data-type-decoder.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,IAAI,EAAC,0BAAuB;AAEpC,+CAA+C;AAC/C,OAAO,EAAC,OAAO,EAAC,6BAA0B;AAQ1C,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAC,4BAAyB;AAGtE,OAAO,EAAC,aAAa,EAAC,oCAAiC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,0CAAuC;AAEnE,gBAAgB;AAChB,OAAO,EAAC,QAAQ,EAAqB,wCAAqC;AAE1E,OAAO,EAAC,MAAM,EAA2C,sCAAmC;AAE5F,OAAO,EAAC,OAAO,EAAoB,uCAAoC;AAEvE,OAAO,EAAC,WAAW,EAAwB,4CAAyC;AAGpF,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,MAAM,EAAC,sCAAmC;AAGlD,OAAO,EAAC,OAAO,EAAC,uCAAoC;AAGpD,OAAO,EAAC,WAAW,EAAC,2CAAwC;AAG5D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AACnE,OAAO,EACL,oBAAoB,EAErB,sDAAmD;AAEpD,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AACzD,OAAO,EAAC,2BAA2B,EAAC,0CAAuC;AAG3E,OAAO,EAAC,UAAU,EAAC,2CAAwC;AAG3D,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAGnE,OAAO,EAAC,aAAa,EAAC,8CAA2C;AAGjE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,iBAAiB,EAAC,kDAA+C;AAGzE,OAAO,EAAC,QAAQ,EAAC,yCAAsC;AAEvD,OAAO,EAAC,KAAK,EAAkB,qCAAkC;AAGjE,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAEnE,iCAAiC;AACjC,OAAO,EAAC,mBAAmB,EAAC,4CAAyC;AACrE,OAAO,EAAC,YAAY,EAAC,oCAAiC;AACtD,OAAO,EAAC,YAAY,EAAC,oCAAiC;AAwFtD,OAAO,EAAC,eAAe,EAAC,sDAAmD;AAC3E,OAAO,EAAC,wBAAwB,EAAC,sDAAmD;AAWpF,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EAE1B,0DAAuD;AASxD,OAAO,EAAC,mBAAmB,EAAC,4DAAyD;AAgBrF,OAAO,EAEL,oBAAoB,EACrB,8DAA2D;AAE5D,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,sDAAmD;AACpG,OAAO,EAAiB,SAAS,EAAE,UAAU,EAAC,mDAAgD;AAE9F,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,iDAA8C;AAe5F,yDAAyD;AACzD,OAAO,EAAC,GAAG,EAAC,uBAAoB;AAChC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACvB,uCAAoC;AACrC,OAAO,EAAC,MAAM,EAAE,aAAa,EAAC,0BAAuB;AACrD,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,OAAO,EAAC,4BAA4B,EAAC,sDAAmD;AAExF,eAAe;AACf,OAAO,EACL,0BAA0B,IAAI,2BAA2B,EACzD,qBAAqB,IAAI,sBAAsB,EAChD,4DAAyD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,IAAI,EAAC,0BAAuB;AAEpC,+CAA+C;AAC/C,OAAO,EAAC,OAAO,EAAC,6BAA0B;AAQ1C,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAC,4BAAyB;AAGtE,OAAO,EAAC,aAAa,EAAC,oCAAiC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,0CAAuC;AAEnE,gBAAgB;AAChB,OAAO,EAAC,QAAQ,EAAqB,wCAAqC;AAE1E,OAAO,EAAC,MAAM,EAA2C,sCAAmC;AAE5F,OAAO,EAAC,OAAO,EAAoB,uCAAoC;AAEvE,OAAO,EAAC,WAAW,EAAwB,4CAAyC;AAGpF,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,MAAM,EAAC,sCAAmC;AAGlD,OAAO,EAAC,OAAO,EAAC,uCAAoC;AAGpD,OAAO,EAAC,WAAW,EAAC,2CAAwC;AAG5D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AACnE,OAAO,EACL,oBAAoB,EAErB,sDAAmD;AAEpD,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AACzD,OAAO,EAAC,2BAA2B,EAAC,0CAAuC;AAG3E,OAAO,EAAC,UAAU,EAAC,2CAAwC;AAG3D,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAGnE,OAAO,EAAC,aAAa,EAAC,8CAA2C;AAGjE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,iBAAiB,EAAC,kDAA+C;AAGzE,OAAO,EAAC,QAAQ,EAAC,yCAAsC;AAEvD,OAAO,EAAC,KAAK,EAAkB,qCAAkC;AAGjE,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAEnE,iCAAiC;AACjC,OAAO,EACL,qBAAqB,EAItB,0DAAuD;AACxD,OAAO,EAAC,iBAAiB,EAAC,0CAAuC;AACjE,OAAO,EAAC,YAAY,EAAC,oCAAiC;AACtD,OAAO,EAAC,YAAY,EAAC,oCAAiC;AAwFtD,OAAO,EAAC,eAAe,EAAC,sDAAmD;AAC3E,OAAO,EAAC,wBAAwB,EAAC,sDAAmD;AAWpF,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EAE1B,0DAAuD;AASxD,OAAO,EAAC,mBAAmB,EAAC,4DAAyD;AAgBrF,OAAO,EAEL,oBAAoB,EACrB,8DAA2D;AAE5D,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,sDAAmD;AACpG,OAAO,EAAiB,SAAS,EAAE,UAAU,EAAC,mDAAgD;AAE9F,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,iDAA8C;AAe5F,yDAAyD;AACzD,OAAO,EAAC,GAAG,EAAC,uBAAoB;AAChC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACvB,uCAAoC;AACrC,OAAO,EAAC,MAAM,EAAE,aAAa,EAAC,0BAAuB;AACrD,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,OAAO,EAAC,4BAA4B,EAAC,sDAAmD;AAExF,eAAe;AACf,OAAO,EACL,0BAA0B,IAAI,2BAA2B,EACzD,qBAAqB,IAAI,sBAAsB,EAChD,4DAAyD"}
@@ -0,0 +1,51 @@
1
+ import type { CompositeUniformValue, UniformValue } from "../adapter/types/uniforms.js";
2
+ import { type ShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
3
+ /**
4
+ * Serializes nested JavaScript uniform values according to a {@link ShaderBlockLayout}.
5
+ */
6
+ export declare class ShaderBlockWriter {
7
+ /** Layout metadata used to flatten and serialize values. */
8
+ readonly layout: ShaderBlockLayout;
9
+ /**
10
+ * Creates a writer for a precomputed shader-block layout.
11
+ */
12
+ constructor(layout: ShaderBlockLayout);
13
+ /**
14
+ * Returns `true` if the flattened layout contains the given field.
15
+ */
16
+ has(name: string): boolean;
17
+ /**
18
+ * Returns offset and size metadata for a flattened field.
19
+ */
20
+ get(name: string): {
21
+ offset: number;
22
+ size: number;
23
+ } | undefined;
24
+ /**
25
+ * Flattens nested composite values into leaf-path values understood by {@link UniformBlock}.
26
+ *
27
+ * Top-level values may be supplied either in nested object form matching the
28
+ * declared composite shader types or as already-flattened leaf-path values.
29
+ */
30
+ getFlatUniformValues(uniformValues: Readonly<Record<string, CompositeUniformValue>>): Record<string, UniformValue>;
31
+ /**
32
+ * Serializes the supplied values into buffer-backed binary data.
33
+ *
34
+ * The returned view length matches {@link ShaderBlockLayout.byteLength}, which
35
+ * is the exact packed size of the block.
36
+ */
37
+ getData(uniformValues: Readonly<Record<string, CompositeUniformValue>>): Uint8Array;
38
+ /**
39
+ * Recursively flattens nested values using the declared composite shader type.
40
+ */
41
+ private _flattenCompositeValue;
42
+ /**
43
+ * Expands tightly packed numeric arrays into per-element leaf fields.
44
+ */
45
+ private _flattenPackedArray;
46
+ /**
47
+ * Writes one flattened leaf value into its typed-array view.
48
+ */
49
+ private _writeLeafValue;
50
+ }
51
+ //# sourceMappingURL=shader-block-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-block-writer.d.ts","sourceRoot":"","sources":["../../src/portable/shader-block-writer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,qBAAqB,EAAE,YAAY,EAAC,qCAAkC;AAQnF,OAAO,EAGL,KAAK,iBAAiB,EACvB,2DAAwD;AAEzD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;OAEG;gBACS,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS;IAK7D;;;;;OAKG;IACH,oBAAoB,CAClB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,GAC7D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAe/B;;;;;OAKG;IACH,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,GAAG,UAAU;IAkBnF;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgE9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,eAAe;CAoCxB"}
@@ -0,0 +1,185 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { getScratchArrayBuffer } from "../utils/array-utils-flat.js";
5
+ import { isNumberArray } from "../utils/is-array.js";
6
+ import { log } from "../utils/log.js";
7
+ import { getLeafLayoutInfo, isCompositeShaderTypeStruct } from "../shadertypes/shader-types/shader-block-layout.js";
8
+ /**
9
+ * Serializes nested JavaScript uniform values according to a {@link ShaderBlockLayout}.
10
+ */
11
+ export class ShaderBlockWriter {
12
+ /** Layout metadata used to flatten and serialize values. */
13
+ layout;
14
+ /**
15
+ * Creates a writer for a precomputed shader-block layout.
16
+ */
17
+ constructor(layout) {
18
+ this.layout = layout;
19
+ }
20
+ /**
21
+ * Returns `true` if the flattened layout contains the given field.
22
+ */
23
+ has(name) {
24
+ return Boolean(this.layout.fields[name]);
25
+ }
26
+ /**
27
+ * Returns offset and size metadata for a flattened field.
28
+ */
29
+ get(name) {
30
+ const entry = this.layout.fields[name];
31
+ return entry ? { offset: entry.offset, size: entry.size } : undefined;
32
+ }
33
+ /**
34
+ * Flattens nested composite values into leaf-path values understood by {@link UniformBlock}.
35
+ *
36
+ * Top-level values may be supplied either in nested object form matching the
37
+ * declared composite shader types or as already-flattened leaf-path values.
38
+ */
39
+ getFlatUniformValues(uniformValues) {
40
+ const flattenedUniformValues = {};
41
+ for (const [name, value] of Object.entries(uniformValues)) {
42
+ const uniformType = this.layout.uniformTypes[name];
43
+ if (uniformType) {
44
+ this._flattenCompositeValue(flattenedUniformValues, name, uniformType, value);
45
+ }
46
+ else if (this.layout.fields[name]) {
47
+ flattenedUniformValues[name] = value;
48
+ }
49
+ }
50
+ return flattenedUniformValues;
51
+ }
52
+ /**
53
+ * Serializes the supplied values into buffer-backed binary data.
54
+ *
55
+ * The returned view length matches {@link ShaderBlockLayout.byteLength}, which
56
+ * is the exact packed size of the block.
57
+ */
58
+ getData(uniformValues) {
59
+ const buffer = getScratchArrayBuffer(this.layout.byteLength);
60
+ new Uint8Array(buffer, 0, this.layout.byteLength).fill(0);
61
+ const typedArrays = {
62
+ i32: new Int32Array(buffer),
63
+ u32: new Uint32Array(buffer),
64
+ f32: new Float32Array(buffer),
65
+ f16: new Uint16Array(buffer)
66
+ };
67
+ const flattenedUniformValues = this.getFlatUniformValues(uniformValues);
68
+ for (const [name, value] of Object.entries(flattenedUniformValues)) {
69
+ this._writeLeafValue(typedArrays, name, value);
70
+ }
71
+ return new Uint8Array(buffer, 0, this.layout.byteLength);
72
+ }
73
+ /**
74
+ * Recursively flattens nested values using the declared composite shader type.
75
+ */
76
+ _flattenCompositeValue(flattenedUniformValues, baseName, uniformType, value) {
77
+ if (value === undefined) {
78
+ return;
79
+ }
80
+ if (typeof uniformType === 'string' || this.layout.fields[baseName]) {
81
+ flattenedUniformValues[baseName] = value;
82
+ return;
83
+ }
84
+ if (Array.isArray(uniformType)) {
85
+ const elementType = uniformType[0];
86
+ const length = uniformType[1];
87
+ if (Array.isArray(elementType)) {
88
+ throw new Error(`Nested arrays are not supported for ${baseName}`);
89
+ }
90
+ if (typeof elementType === 'string' && isNumberArray(value)) {
91
+ this._flattenPackedArray(flattenedUniformValues, baseName, elementType, length, value);
92
+ return;
93
+ }
94
+ if (!Array.isArray(value)) {
95
+ log.warn(`Unsupported uniform array value for ${baseName}:`, value)();
96
+ return;
97
+ }
98
+ for (let index = 0; index < Math.min(value.length, length); index++) {
99
+ const elementValue = value[index];
100
+ if (elementValue === undefined) {
101
+ continue;
102
+ }
103
+ this._flattenCompositeValue(flattenedUniformValues, `${baseName}[${index}]`, elementType, elementValue);
104
+ }
105
+ return;
106
+ }
107
+ if (isCompositeShaderTypeStruct(uniformType) && isCompositeUniformObject(value)) {
108
+ for (const [key, subValue] of Object.entries(value)) {
109
+ if (subValue === undefined) {
110
+ continue;
111
+ }
112
+ const nestedName = `${baseName}.${key}`;
113
+ this._flattenCompositeValue(flattenedUniformValues, nestedName, uniformType[key], subValue);
114
+ }
115
+ return;
116
+ }
117
+ log.warn(`Unsupported uniform value for ${baseName}:`, value)();
118
+ }
119
+ /**
120
+ * Expands tightly packed numeric arrays into per-element leaf fields.
121
+ */
122
+ _flattenPackedArray(flattenedUniformValues, baseName, elementType, length, value) {
123
+ const numericValue = value;
124
+ const elementLayout = getLeafLayoutInfo(elementType, this.layout.layout);
125
+ const packedElementLength = elementLayout.components;
126
+ for (let index = 0; index < length; index++) {
127
+ const start = index * packedElementLength;
128
+ if (start >= numericValue.length) {
129
+ break;
130
+ }
131
+ if (packedElementLength === 1) {
132
+ flattenedUniformValues[`${baseName}[${index}]`] = Number(numericValue[start]);
133
+ }
134
+ else {
135
+ flattenedUniformValues[`${baseName}[${index}]`] = sliceNumericArray(value, start, start + packedElementLength);
136
+ }
137
+ }
138
+ }
139
+ /**
140
+ * Writes one flattened leaf value into its typed-array view.
141
+ */
142
+ _writeLeafValue(typedArrays, name, value) {
143
+ const entry = this.layout.fields[name];
144
+ if (!entry) {
145
+ log.warn(`Uniform ${name} not found in layout`)();
146
+ return;
147
+ }
148
+ const { type, components, columns, rows, offset, columnStride } = entry;
149
+ const array = typedArrays[type];
150
+ if (components === 1) {
151
+ array[offset] = Number(value);
152
+ return;
153
+ }
154
+ const sourceValue = value;
155
+ if (columns === 1) {
156
+ for (let componentIndex = 0; componentIndex < components; componentIndex++) {
157
+ array[offset + componentIndex] = Number(sourceValue[componentIndex] ?? 0);
158
+ }
159
+ return;
160
+ }
161
+ let sourceIndex = 0;
162
+ for (let columnIndex = 0; columnIndex < columns; columnIndex++) {
163
+ const columnOffset = offset + columnIndex * columnStride;
164
+ for (let rowIndex = 0; rowIndex < rows; rowIndex++) {
165
+ array[columnOffset + rowIndex] = Number(sourceValue[sourceIndex++] ?? 0);
166
+ }
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Type guard for nested uniform objects.
172
+ */
173
+ function isCompositeUniformObject(value) {
174
+ return (Boolean(value) &&
175
+ typeof value === 'object' &&
176
+ !Array.isArray(value) &&
177
+ !ArrayBuffer.isView(value));
178
+ }
179
+ /**
180
+ * Slices a numeric array-like value without changing its numeric representation.
181
+ */
182
+ function sliceNumericArray(value, start, end) {
183
+ return Array.prototype.slice.call(value, start, end);
184
+ }
185
+ //# sourceMappingURL=shader-block-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-block-writer.js","sourceRoot":"","sources":["../../src/portable/shader-block-writer.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,22 @@ import type { CompositeShaderType } from "../shadertypes/shader-types/shader-typ
2
2
  import type { CompositeUniformValue } from "../adapter/types/uniforms.js";
3
3
  import type { Device } from "../adapter/device.js";
4
4
  import { Buffer } from "../adapter/resources/buffer.js";
5
+ import { type ShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
5
6
  import { UniformBlock } from "./uniform-block.js";
6
- import { UniformBufferLayout } from "./uniform-buffer-layout.js";
7
+ import { ShaderBlockWriter } from "./shader-block-writer.js";
8
+ /** Definition of a single managed uniform block. */
9
+ export type UniformStoreBlockDefinition = {
10
+ /** Declared shader types for the block's uniforms. */
11
+ uniformTypes?: Record<string, CompositeShaderType>;
12
+ /** Reserved for future prop-level defaults. */
13
+ defaultProps?: Record<string, unknown>;
14
+ /** Initial uniform values written into the backing block. */
15
+ defaultUniforms?: Record<string, CompositeUniformValue>;
16
+ /** Explicit shader-block layout override. */
17
+ layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
18
+ };
19
+ /** Uniform block definitions keyed by block name. */
20
+ export type UniformStoreBlocks<TPropGroups extends Record<string, Record<string, unknown>>> = Record<keyof TPropGroups, UniformStoreBlockDefinition>;
7
21
  /**
8
22
  * A uniform store holds a uniform values for one or more uniform blocks,
9
23
  * - It can generate binary data for any uniform buffer
@@ -12,46 +26,64 @@ import { UniformBufferLayout } from "./uniform-buffer-layout.js";
12
26
  * - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.
13
27
  */
14
28
  export declare class UniformStore<TPropGroups extends Record<string, Record<string, unknown>> = Record<string, Record<string, unknown>>> {
29
+ /** Device used to infer layout and allocate buffers. */
30
+ readonly device: Device;
15
31
  /** Stores the uniform values for each uniform block */
16
32
  uniformBlocks: Map<keyof TPropGroups, UniformBlock<Record<string, import("../adapter/types/uniforms").UniformValue>>>;
17
- /** Can generate data for a uniform buffer for each block from data */
18
- uniformBufferLayouts: Map<keyof TPropGroups, UniformBufferLayout>;
33
+ /** Flattened layout metadata for each block. */
34
+ shaderBlockLayouts: Map<keyof TPropGroups, ShaderBlockLayout>;
35
+ /** Serializers for block-backed uniform data. */
36
+ shaderBlockWriters: Map<keyof TPropGroups, ShaderBlockWriter>;
19
37
  /** Actual buffer for the blocks */
20
38
  uniformBuffers: Map<keyof TPropGroups, Buffer>;
21
39
  /**
22
- * Create a new UniformStore instance
23
- * @param blocks
40
+ * Creates a new {@link UniformStore} for the supplied device and block definitions.
24
41
  */
25
- constructor(blocks: Record<keyof TPropGroups, {
26
- uniformTypes?: Record<string, CompositeShaderType>;
27
- defaultProps?: Record<string, unknown>;
28
- defaultUniforms?: Record<string, CompositeUniformValue>;
29
- }>);
42
+ constructor(device: Device, blocks: UniformStoreBlocks<TPropGroups>);
30
43
  /** Destroy any managed uniform buffers */
31
44
  destroy(): void;
32
45
  /**
33
46
  * Set uniforms
34
- * Makes all properties partial
47
+ *
48
+ * Makes all group properties partial and eagerly propagates changes to any
49
+ * managed GPU buffers.
35
50
  */
36
51
  setUniforms(uniforms: Partial<{
37
52
  [group in keyof TPropGroups]: Partial<TPropGroups[group]>;
38
53
  }>): void;
39
- /** Get the required minimum length of the uniform buffer */
54
+ /**
55
+ * Returns the allocation size for the named uniform buffer.
56
+ *
57
+ * This may exceed the packed layout size because minimum buffer-size policy is
58
+ * applied at the store layer.
59
+ */
40
60
  getUniformBufferByteLength(uniformBufferName: keyof TPropGroups): number;
41
- /** Get formatted binary memory that can be uploaded to a buffer */
61
+ /**
62
+ * Returns packed binary data that can be uploaded to the named uniform buffer.
63
+ *
64
+ * The returned view length matches the packed block size and is not padded to
65
+ * the store's minimum allocation size.
66
+ */
42
67
  getUniformBufferData(uniformBufferName: keyof TPropGroups): Uint8Array;
43
68
  /**
44
- * Creates an unmanaged uniform buffer (umnanaged means that application is responsible for destroying it)
45
- * The new buffer is initialized with current / supplied values
69
+ * Creates an unmanaged uniform buffer initialized with the current or supplied values.
46
70
  */
47
- createUniformBuffer(device: Device, uniformBufferName: keyof TPropGroups, uniforms?: Partial<{
71
+ createUniformBuffer(uniformBufferName: keyof TPropGroups, uniforms?: Partial<{
48
72
  [group in keyof TPropGroups]: Partial<TPropGroups[group]>;
49
73
  }>): Buffer;
50
- /** Get the managed uniform buffer. "managed" resources are destroyed when the uniformStore is destroyed. */
51
- getManagedUniformBuffer(device: Device, uniformBufferName: keyof TPropGroups): Buffer;
52
- /** Updates all uniform buffers where values have changed */
74
+ /** Returns the managed uniform buffer for the named block. */
75
+ getManagedUniformBuffer(uniformBufferName: keyof TPropGroups): Buffer;
76
+ /**
77
+ * Updates every managed uniform buffer whose source uniforms have changed.
78
+ *
79
+ * @returns The first redraw reason encountered, or `false` if nothing changed.
80
+ */
53
81
  updateUniformBuffers(): false | string;
54
- /** Update one uniform buffer. Only updates if values have changed */
82
+ /**
83
+ * Updates one managed uniform buffer if its corresponding block is dirty.
84
+ *
85
+ * @returns The redraw reason for the update, or `false` if no write occurred.
86
+ */
55
87
  updateUniformBuffer(uniformBufferName: keyof TPropGroups): false | string;
56
88
  }
57
89
  //# sourceMappingURL=uniform-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAC,oDAAiD;AAClF,OAAO,KAAK,EAAC,qBAAqB,EAAC,qCAAkC;AACrE,OAAO,KAAK,EAAC,MAAM,EAAC,6BAA0B;AAC9C,OAAO,EAAC,MAAM,EAAC,uCAAoC;AAEnD,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAClE,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxB;IAED,uDAAuD;IACvD,aAAa,yGAA8C;IAC3D,sEAAsE;IACtE,oBAAoB,8CAAqD;IACzE,mCAAmC;IACnC,cAAc,iCAAwC;IAEtD;;;OAGG;gBAED,MAAM,EAAE,MAAM,CACZ,MAAM,WAAW,EACjB;QACE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACnD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KACzD,CACF;IAkBH,0CAA0C;IAC1C,OAAO,IAAI,IAAI;IAMf;;;OAGG;IACH,WAAW,CACT,QAAQ,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC7E,IAAI;IAeP,4DAA4D;IAC5D,0BAA0B,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAIxE,mEAAmE;IACnE,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,UAAU;IAMtE;;;OAGG;IACH,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,WAAW,EACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC9E,MAAM;IAeT,4GAA4G;IAC5G,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAcrF,4DAA4D;IAC5D,oBAAoB,IAAI,KAAK,GAAG,MAAM;IAYtC,qEAAqE;IACrE,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM;CAwB1E"}
1
+ {"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAC,oDAAiD;AAClF,OAAO,KAAK,EAAC,qBAAqB,EAAC,qCAAkC;AACrE,OAAO,KAAK,EAAC,MAAM,EAAC,6BAA0B;AAC9C,OAAO,EAAC,MAAM,EAAC,uCAAoC;AAEnD,OAAO,EAEL,KAAK,iBAAiB,EACvB,2DAAwD;AACzD,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxD,6CAA6C;IAC7C,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;CACrD,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IACxF,MAAM,CAAC,MAAM,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAazD;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAClE,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxB;IAED,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,aAAa,yGAA8C;IAC3D,gDAAgD;IAChD,kBAAkB,4CAAmD;IACrE,iDAAiD;IACjD,kBAAkB,4CAAmD;IACrE,mCAAmC;IACnC,cAAc,iCAAwC;IAEtD;;OAEG;gBACS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC;IAqBnE,0CAA0C;IAC1C,OAAO,IAAI,IAAI;IAMf;;;;;OAKG;IACH,WAAW,CACT,QAAQ,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC7E,IAAI;IAeP;;;;;OAKG;IACH,0BAA0B,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAKxE;;;;;OAKG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,UAAU;IAMtE;;OAEG;IACH,mBAAmB,CACjB,iBAAiB,EAAE,MAAM,WAAW,EACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC9E,MAAM;IAeT,8DAA8D;IAC9D,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAcrE;;;;OAIG;IACH,oBAAoB,IAAI,KAAK,GAAG,MAAM;IAYtC;;;;OAIG;IACH,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM;CAwB1E"}
@@ -3,8 +3,19 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { Buffer } from "../adapter/resources/buffer.js";
5
5
  import { log } from "../utils/log.js";
6
+ import { makeShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
6
7
  import { UniformBlock } from "./uniform-block.js";
7
- import { UniformBufferLayout } from "./uniform-buffer-layout.js";
8
+ import { ShaderBlockWriter } from "./shader-block-writer.js";
9
+ /**
10
+ * Smallest buffer size that can be used for uniform buffers.
11
+ *
12
+ * This is an allocation policy rather than part of {@link ShaderBlockLayout}.
13
+ * Layouts report the exact packed size, while the store applies any minimum
14
+ * buffer-size rule when allocating GPU buffers.
15
+ *
16
+ * TODO - does this depend on device?
17
+ */
18
+ const minUniformBufferSize = 1024;
8
19
  /**
9
20
  * A uniform store holds a uniform values for one or more uniform blocks,
10
21
  * - It can generate binary data for any uniform buffer
@@ -13,25 +24,33 @@ import { UniformBufferLayout } from "./uniform-buffer-layout.js";
13
24
  * - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.
14
25
  */
15
26
  export class UniformStore {
27
+ /** Device used to infer layout and allocate buffers. */
28
+ device;
16
29
  /** Stores the uniform values for each uniform block */
17
30
  uniformBlocks = new Map();
18
- /** Can generate data for a uniform buffer for each block from data */
19
- uniformBufferLayouts = new Map();
31
+ /** Flattened layout metadata for each block. */
32
+ shaderBlockLayouts = new Map();
33
+ /** Serializers for block-backed uniform data. */
34
+ shaderBlockWriters = new Map();
20
35
  /** Actual buffer for the blocks */
21
36
  uniformBuffers = new Map();
22
37
  /**
23
- * Create a new UniformStore instance
24
- * @param blocks
38
+ * Creates a new {@link UniformStore} for the supplied device and block definitions.
25
39
  */
26
- constructor(blocks) {
40
+ constructor(device, blocks) {
41
+ this.device = device;
27
42
  for (const [bufferName, block] of Object.entries(blocks)) {
28
43
  const uniformBufferName = bufferName;
29
44
  // Create a layout object to help us generate correctly formatted binary uniform buffers
30
- const uniformBufferLayout = new UniformBufferLayout(block.uniformTypes ?? {});
31
- this.uniformBufferLayouts.set(uniformBufferName, uniformBufferLayout);
45
+ const shaderBlockLayout = makeShaderBlockLayout(block.uniformTypes ?? {}, {
46
+ layout: block.layout ?? getDefaultUniformBufferLayout(device)
47
+ });
48
+ const shaderBlockWriter = new ShaderBlockWriter(shaderBlockLayout);
49
+ this.shaderBlockLayouts.set(uniformBufferName, shaderBlockLayout);
50
+ this.shaderBlockWriters.set(uniformBufferName, shaderBlockWriter);
32
51
  // Create a Uniform block to store the uniforms for each buffer.
33
52
  const uniformBlock = new UniformBlock({ name: bufferName });
34
- uniformBlock.setUniforms(uniformBufferLayout.getFlatUniformValues(block.defaultUniforms || {}));
53
+ uniformBlock.setUniforms(shaderBlockWriter.getFlatUniformValues(block.defaultUniforms || {}));
35
54
  this.uniformBlocks.set(uniformBufferName, uniformBlock);
36
55
  }
37
56
  }
@@ -43,39 +62,51 @@ export class UniformStore {
43
62
  }
44
63
  /**
45
64
  * Set uniforms
46
- * Makes all properties partial
65
+ *
66
+ * Makes all group properties partial and eagerly propagates changes to any
67
+ * managed GPU buffers.
47
68
  */
48
69
  setUniforms(uniforms) {
49
70
  for (const [blockName, uniformValues] of Object.entries(uniforms)) {
50
71
  const uniformBufferName = blockName;
51
- const uniformBufferLayout = this.uniformBufferLayouts.get(uniformBufferName);
52
- const flattenedUniforms = uniformBufferLayout?.getFlatUniformValues((uniformValues || {}));
72
+ const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
73
+ const flattenedUniforms = shaderBlockWriter?.getFlatUniformValues((uniformValues || {}));
53
74
  this.uniformBlocks.get(uniformBufferName)?.setUniforms(flattenedUniforms || {});
54
75
  // We leverage logging in updateUniformBuffers(), even though slightly less efficient
55
76
  // this.updateUniformBuffer(blockName);
56
77
  }
57
78
  this.updateUniformBuffers();
58
79
  }
59
- /** Get the required minimum length of the uniform buffer */
80
+ /**
81
+ * Returns the allocation size for the named uniform buffer.
82
+ *
83
+ * This may exceed the packed layout size because minimum buffer-size policy is
84
+ * applied at the store layer.
85
+ */
60
86
  getUniformBufferByteLength(uniformBufferName) {
61
- return this.uniformBufferLayouts.get(uniformBufferName)?.byteLength || 0;
87
+ const packedByteLength = this.shaderBlockLayouts.get(uniformBufferName)?.byteLength || 0;
88
+ return Math.max(packedByteLength, minUniformBufferSize);
62
89
  }
63
- /** Get formatted binary memory that can be uploaded to a buffer */
90
+ /**
91
+ * Returns packed binary data that can be uploaded to the named uniform buffer.
92
+ *
93
+ * The returned view length matches the packed block size and is not padded to
94
+ * the store's minimum allocation size.
95
+ */
64
96
  getUniformBufferData(uniformBufferName) {
65
97
  const uniformValues = this.uniformBlocks.get(uniformBufferName)?.getAllUniforms() || {};
66
- // @ts-ignore
67
- return this.uniformBufferLayouts.get(uniformBufferName)?.getData(uniformValues);
98
+ const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
99
+ return shaderBlockWriter?.getData(uniformValues) || new Uint8Array(0);
68
100
  }
69
101
  /**
70
- * Creates an unmanaged uniform buffer (umnanaged means that application is responsible for destroying it)
71
- * The new buffer is initialized with current / supplied values
102
+ * Creates an unmanaged uniform buffer initialized with the current or supplied values.
72
103
  */
73
- createUniformBuffer(device, uniformBufferName, uniforms) {
104
+ createUniformBuffer(uniformBufferName, uniforms) {
74
105
  if (uniforms) {
75
106
  this.setUniforms(uniforms);
76
107
  }
77
108
  const byteLength = this.getUniformBufferByteLength(uniformBufferName);
78
- const uniformBuffer = device.createBuffer({
109
+ const uniformBuffer = this.device.createBuffer({
79
110
  usage: Buffer.UNIFORM | Buffer.COPY_DST,
80
111
  byteLength
81
112
  });
@@ -84,11 +115,11 @@ export class UniformStore {
84
115
  uniformBuffer.write(uniformBufferData);
85
116
  return uniformBuffer;
86
117
  }
87
- /** Get the managed uniform buffer. "managed" resources are destroyed when the uniformStore is destroyed. */
88
- getManagedUniformBuffer(device, uniformBufferName) {
118
+ /** Returns the managed uniform buffer for the named block. */
119
+ getManagedUniformBuffer(uniformBufferName) {
89
120
  if (!this.uniformBuffers.get(uniformBufferName)) {
90
121
  const byteLength = this.getUniformBufferByteLength(uniformBufferName);
91
- const uniformBuffer = device.createBuffer({
122
+ const uniformBuffer = this.device.createBuffer({
92
123
  usage: Buffer.UNIFORM | Buffer.COPY_DST,
93
124
  byteLength
94
125
  });
@@ -98,7 +129,11 @@ export class UniformStore {
98
129
  // @ts-ignore
99
130
  return this.uniformBuffers.get(uniformBufferName);
100
131
  }
101
- /** Updates all uniform buffers where values have changed */
132
+ /**
133
+ * Updates every managed uniform buffer whose source uniforms have changed.
134
+ *
135
+ * @returns The first redraw reason encountered, or `false` if nothing changed.
136
+ */
102
137
  updateUniformBuffers() {
103
138
  let reason = false;
104
139
  for (const uniformBufferName of this.uniformBlocks.keys()) {
@@ -110,7 +145,11 @@ export class UniformStore {
110
145
  }
111
146
  return reason;
112
147
  }
113
- /** Update one uniform buffer. Only updates if values have changed */
148
+ /**
149
+ * Updates one managed uniform buffer if its corresponding block is dirty.
150
+ *
151
+ * @returns The redraw reason for the update, or `false` if no write occurred.
152
+ */
114
153
  updateUniformBuffer(uniformBufferName) {
115
154
  const uniformBlock = this.uniformBlocks.get(uniformBufferName);
116
155
  let uniformBuffer = this.uniformBuffers.get(uniformBufferName);
@@ -128,4 +167,10 @@ export class UniformStore {
128
167
  return reason;
129
168
  }
130
169
  }
170
+ /**
171
+ * Returns the default uniform-buffer layout for the supplied device.
172
+ */
173
+ function getDefaultUniformBufferLayout(device) {
174
+ return device.type === 'webgpu' ? 'wgsl-uniform' : 'std140';
175
+ }
131
176
  //# sourceMappingURL=uniform-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}