@luma.gl/core 9.2.0-alpha.3 → 9.2.0-alpha.6
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.
- package/dist/adapter/canvas-context.d.ts +8 -2
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +17 -3
- package/dist/adapter/canvas-context.js.map +1 -1
- package/dist/adapter/luma.js +1 -1
- package/dist/dist.dev.js +24 -8
- package/dist/dist.min.js +5 -5
- package/dist/index.cjs +22 -9
- package/dist/index.cjs.map +2 -2
- package/dist/portable/uniform-buffer-layout.d.ts +1 -1
- package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
- package/dist/portable/uniform-buffer-layout.js +6 -7
- package/dist/portable/uniform-buffer-layout.js.map +1 -1
- package/dist/portable/uniform-store.d.ts +1 -0
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +1 -1
- package/dist/portable/uniform-store.js.map +1 -1
- package/package.json +2 -2
- package/src/adapter/canvas-context.ts +26 -6
- package/src/portable/uniform-buffer-layout.ts +9 -8
- package/src/portable/uniform-store.ts +5 -1
|
@@ -14,7 +14,7 @@ export declare class UniformBufferLayout {
|
|
|
14
14
|
/** number of bytes needed for buffer allocation */
|
|
15
15
|
readonly byteLength: number;
|
|
16
16
|
/** Create a new UniformBufferLayout given a map of attributes. */
|
|
17
|
-
constructor(uniformTypes: Record<string, VariableShaderType>);
|
|
17
|
+
constructor(uniformTypes: Record<string, VariableShaderType>, uniformSizes?: Record<string, number>);
|
|
18
18
|
/** Get the data for the complete buffer */
|
|
19
19
|
getData(uniformValues: Record<string, UniformValue>): Uint8Array;
|
|
20
20
|
/** Does this layout have a field with specified name */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-buffer-layout.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-buffer-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,iBAAiB,EAAC,gDAA6C;AAC5E,OAAO,KAAK,EAAC,kBAAkB,EAAC,kDAA+C;AAI/E,OAAO,KAAK,EAAC,YAAY,EAAC,qCAAkC;AAW5D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAC,CAAC,CAAM;IAE9F,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,kEAAkE;
|
|
1
|
+
{"version":3,"file":"uniform-buffer-layout.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-buffer-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,iBAAiB,EAAC,gDAA6C;AAC5E,OAAO,KAAK,EAAC,kBAAkB,EAAC,kDAA+C;AAI/E,OAAO,KAAK,EAAC,YAAY,EAAC,qCAAkC;AAW5D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAC,CAAC,CAAM;IAE9F,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,kEAAkE;gBAEhE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAChD,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAyB3C,2CAA2C;IAC3C,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,UAAU;IAgDhE,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM;IAIhB,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS;CAI9D"}
|
|
@@ -20,13 +20,15 @@ export class UniformBufferLayout {
|
|
|
20
20
|
/** number of bytes needed for buffer allocation */
|
|
21
21
|
byteLength;
|
|
22
22
|
/** Create a new UniformBufferLayout given a map of attributes. */
|
|
23
|
-
constructor(uniformTypes) {
|
|
23
|
+
constructor(uniformTypes, uniformSizes = {}) {
|
|
24
24
|
/** number of 4 byte slots taken */
|
|
25
25
|
let size = 0;
|
|
26
26
|
// Add layout (type, size and offset) definitions for each uniform in the layout
|
|
27
27
|
for (const [key, uniformType] of Object.entries(uniformTypes)) {
|
|
28
28
|
const typeAndComponents = getVariableShaderTypeInfo(uniformType);
|
|
29
|
-
const { type, components
|
|
29
|
+
const { type, components } = typeAndComponents;
|
|
30
|
+
// Calculate total count for uniform arrays.
|
|
31
|
+
const count = components * (uniformSizes?.[key] ?? 1);
|
|
30
32
|
// First, align (bump) current offset to an even multiple of current object (1, 2, 4)
|
|
31
33
|
size = alignTo(size, count);
|
|
32
34
|
// Use the aligned size as the offset of the current uniform.
|
|
@@ -41,9 +43,8 @@ export class UniformBufferLayout {
|
|
|
41
43
|
}
|
|
42
44
|
/** Get the data for the complete buffer */
|
|
43
45
|
getData(uniformValues) {
|
|
44
|
-
const bufferSize = Math.max(this.byteLength, minBufferSize);
|
|
45
46
|
// Allocate three typed arrays pointing at same memory
|
|
46
|
-
const arrayBuffer = getScratchArrayBuffer(
|
|
47
|
+
const arrayBuffer = getScratchArrayBuffer(this.byteLength);
|
|
47
48
|
const typedArrays = {
|
|
48
49
|
i32: new Int32Array(arrayBuffer),
|
|
49
50
|
u32: new Uint32Array(arrayBuffer),
|
|
@@ -51,8 +52,6 @@ export class UniformBufferLayout {
|
|
|
51
52
|
// TODO not implemented
|
|
52
53
|
f16: new Uint16Array(arrayBuffer)
|
|
53
54
|
};
|
|
54
|
-
// TODO is this needed?
|
|
55
|
-
// typedArrays.i32.fill(0);
|
|
56
55
|
for (const [name, value] of Object.entries(uniformValues)) {
|
|
57
56
|
const uniformLayout = this.layout[name];
|
|
58
57
|
if (!uniformLayout) {
|
|
@@ -82,7 +81,7 @@ export class UniformBufferLayout {
|
|
|
82
81
|
typedArray.set(value, offset);
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
|
-
return new Uint8Array(arrayBuffer);
|
|
84
|
+
return new Uint8Array(arrayBuffer, 0, this.byteLength);
|
|
86
85
|
}
|
|
87
86
|
/** Does this layout have a field with specified name */
|
|
88
87
|
has(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-buffer-layout.js","sourceRoot":"","sources":["../../src/portable/uniform-buffer-layout.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,OAAO,EAAC,uDAAoD;AACpE,OAAO,EAAC,yBAAyB,EAAC,yDAAsD;AAGxF,OAAO,EAAC,qBAAqB,EAAC,qCAAkC;AAChE,OAAO,EAAC,aAAa,EAAC,6BAA0B;AAChD,OAAO,EAAC,GAAG,EAAC,wBAAqB;AAEjC;;;GAGG;AACH,MAAM,aAAa,GAAW,IAAI,CAAC;AAEnC;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACrB,MAAM,GAA4E,EAAE,CAAC;IAE9F,mDAAmD;IAC1C,UAAU,CAAS;IAE5B,kEAAkE;IAClE,
|
|
1
|
+
{"version":3,"file":"uniform-buffer-layout.js","sourceRoot":"","sources":["../../src/portable/uniform-buffer-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export declare class UniformStore<TPropGroups extends Record<string, Record<stri
|
|
|
24
24
|
*/
|
|
25
25
|
constructor(blocks: Record<keyof TPropGroups, {
|
|
26
26
|
uniformTypes?: Record<string, VariableShaderType>;
|
|
27
|
+
uniformSizes?: Record<string, number>;
|
|
27
28
|
defaultProps?: Record<string, unknown>;
|
|
28
29
|
defaultUniforms?: Record<string, UniformValue>;
|
|
29
30
|
}>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,kDAA+C;AAC/E,OAAO,KAAK,EAAC,YAAY,EAAC,qCAAkC;AAC5D,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,qEAA8C;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,kBAAkB,CAAC,CAAC;QAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KAChD,CACF;
|
|
1
|
+
{"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,kDAA+C;AAC/E,OAAO,KAAK,EAAC,YAAY,EAAC,qCAAkC;AAC5D,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,qEAA8C;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,kBAAkB,CAAC,CAAC;QAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KAChD,CACF;IAmBH,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;IAUP,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"}
|
|
@@ -27,7 +27,7 @@ export class UniformStore {
|
|
|
27
27
|
for (const [bufferName, block] of Object.entries(blocks)) {
|
|
28
28
|
const uniformBufferName = bufferName;
|
|
29
29
|
// Create a layout object to help us generate correctly formatted binary uniform buffers
|
|
30
|
-
const uniformBufferLayout = new UniformBufferLayout(block.uniformTypes
|
|
30
|
+
const uniformBufferLayout = new UniformBufferLayout(block.uniformTypes ?? {}, block.uniformSizes ?? {});
|
|
31
31
|
this.uniformBufferLayouts.set(uniformBufferName, uniformBufferLayout);
|
|
32
32
|
// Create a Uniform block to store the uniforms for each buffer.
|
|
33
33
|
const uniformBlock = new UniformBlock({ name: bufferName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,MAAM,EAAC,uCAAoC;AACnD,OAAO,EAAC,GAAG,EAAC,wBAAqB;AACjC,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAMvB,uDAAuD;IACvD,aAAa,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC3D,sEAAsE;IACtE,oBAAoB,GAAG,IAAI,GAAG,EAA0C,CAAC;IACzE,mCAAmC;IACnC,cAAc,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEtD;;;OAGG;IACH,YACE,
|
|
1
|
+
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/core",
|
|
3
|
-
"version": "9.2.0-alpha.
|
|
3
|
+
"version": "9.2.0-alpha.6",
|
|
4
4
|
"description": "The luma.gl core Device API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"@probe.gl/stats": "^4.0.8",
|
|
47
47
|
"@types/offscreencanvas": "^2019.6.4"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "63fe3fd0912c83f7c4a012016c57048a250b591f"
|
|
50
50
|
}
|
|
@@ -23,8 +23,8 @@ export type CanvasContextProps = {
|
|
|
23
23
|
height?: number;
|
|
24
24
|
/** Visibility (only used if new canvas is created). */
|
|
25
25
|
visible?: boolean;
|
|
26
|
-
/** Whether to size the drawing buffer to the pixel size during auto resize */
|
|
27
|
-
useDevicePixels?: boolean;
|
|
26
|
+
/** Whether to size the drawing buffer to the pixel size during auto resize. If a number is provided it is used as a static pixel ratio */
|
|
27
|
+
useDevicePixels?: boolean | number;
|
|
28
28
|
/** Whether to track window resizes. */
|
|
29
29
|
autoResize?: boolean;
|
|
30
30
|
/** @see https://developer.mozilla.org/en-US/docs/Web/API/GPUCanvasContext/configure#alphamode */
|
|
@@ -35,6 +35,11 @@ export type CanvasContextProps = {
|
|
|
35
35
|
trackPosition?: boolean;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
export type MutableCanvasContextProps = {
|
|
39
|
+
/** Whether to size the drawing buffer to the pixel size during auto resize. If a number is provided it is used as a static pixel ratio */
|
|
40
|
+
useDevicePixels?: boolean | number;
|
|
41
|
+
};
|
|
42
|
+
|
|
38
43
|
/**
|
|
39
44
|
* Manages a canvas. Supports both HTML or offscreen canvas
|
|
40
45
|
* - Creates a new canvas or looks up a canvas from the DOM
|
|
@@ -186,6 +191,14 @@ export abstract class CanvasContext {
|
|
|
186
191
|
this.destroyed = true;
|
|
187
192
|
}
|
|
188
193
|
|
|
194
|
+
setProps(props: MutableCanvasContextProps): this {
|
|
195
|
+
if ('useDevicePixels' in props) {
|
|
196
|
+
this.props.useDevicePixels = props.useDevicePixels || false;
|
|
197
|
+
this._updateDrawingBufferSize();
|
|
198
|
+
}
|
|
199
|
+
return this;
|
|
200
|
+
}
|
|
201
|
+
|
|
189
202
|
/** Returns a framebuffer with properly resized current 'swap chain' textures */
|
|
190
203
|
abstract getCurrentFramebuffer(options?: {
|
|
191
204
|
depthStencilFormat?: TextureFormatDepthStencil | false;
|
|
@@ -360,9 +373,19 @@ export abstract class CanvasContext {
|
|
|
360
373
|
this.devicePixelWidth = Math.max(1, Math.min(devicePixelWidth, maxDevicePixelWidth));
|
|
361
374
|
this.devicePixelHeight = Math.max(1, Math.min(devicePixelHeight, maxDevicePixelHeight));
|
|
362
375
|
|
|
376
|
+
this._updateDrawingBufferSize();
|
|
377
|
+
|
|
378
|
+
// Inform the device
|
|
379
|
+
this.device.props.onResize(this, {oldPixelSize});
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
protected _updateDrawingBufferSize() {
|
|
363
383
|
// Update the canvas drawing buffer size
|
|
364
384
|
if (this.props.autoResize) {
|
|
365
|
-
if (this.props.useDevicePixels) {
|
|
385
|
+
if (typeof this.props.useDevicePixels === 'number') {
|
|
386
|
+
const dpr = this.props.useDevicePixels;
|
|
387
|
+
this.setDrawingBufferSize(this.cssWidth * dpr, this.cssHeight * dpr);
|
|
388
|
+
} else if (this.props.useDevicePixels) {
|
|
366
389
|
this.setDrawingBufferSize(this.devicePixelWidth, this.devicePixelHeight);
|
|
367
390
|
} else {
|
|
368
391
|
this.setDrawingBufferSize(this.cssWidth, this.cssHeight);
|
|
@@ -377,9 +400,6 @@ export abstract class CanvasContext {
|
|
|
377
400
|
this.isInitialized = true;
|
|
378
401
|
|
|
379
402
|
this.updatePosition();
|
|
380
|
-
|
|
381
|
-
// Inform the device
|
|
382
|
-
this.device.props.onResize(this, {oldPixelSize});
|
|
383
403
|
}
|
|
384
404
|
|
|
385
405
|
/** Monitor DPR changes */
|
|
@@ -29,14 +29,19 @@ export class UniformBufferLayout {
|
|
|
29
29
|
readonly byteLength: number;
|
|
30
30
|
|
|
31
31
|
/** Create a new UniformBufferLayout given a map of attributes. */
|
|
32
|
-
constructor(
|
|
32
|
+
constructor(
|
|
33
|
+
uniformTypes: Record<string, VariableShaderType>,
|
|
34
|
+
uniformSizes: Record<string, number> = {}
|
|
35
|
+
) {
|
|
33
36
|
/** number of 4 byte slots taken */
|
|
34
37
|
let size: number = 0;
|
|
35
38
|
|
|
36
39
|
// Add layout (type, size and offset) definitions for each uniform in the layout
|
|
37
40
|
for (const [key, uniformType] of Object.entries(uniformTypes)) {
|
|
38
41
|
const typeAndComponents = getVariableShaderTypeInfo(uniformType);
|
|
39
|
-
const {type, components
|
|
42
|
+
const {type, components} = typeAndComponents;
|
|
43
|
+
// Calculate total count for uniform arrays.
|
|
44
|
+
const count = components * (uniformSizes?.[key] ?? 1);
|
|
40
45
|
// First, align (bump) current offset to an even multiple of current object (1, 2, 4)
|
|
41
46
|
size = alignTo(size, count);
|
|
42
47
|
// Use the aligned size as the offset of the current uniform.
|
|
@@ -53,10 +58,8 @@ export class UniformBufferLayout {
|
|
|
53
58
|
|
|
54
59
|
/** Get the data for the complete buffer */
|
|
55
60
|
getData(uniformValues: Record<string, UniformValue>): Uint8Array {
|
|
56
|
-
const bufferSize = Math.max(this.byteLength, minBufferSize);
|
|
57
|
-
|
|
58
61
|
// Allocate three typed arrays pointing at same memory
|
|
59
|
-
const arrayBuffer = getScratchArrayBuffer(
|
|
62
|
+
const arrayBuffer = getScratchArrayBuffer(this.byteLength);
|
|
60
63
|
const typedArrays = {
|
|
61
64
|
i32: new Int32Array(arrayBuffer),
|
|
62
65
|
u32: new Uint32Array(arrayBuffer),
|
|
@@ -64,8 +67,6 @@ export class UniformBufferLayout {
|
|
|
64
67
|
// TODO not implemented
|
|
65
68
|
f16: new Uint16Array(arrayBuffer)
|
|
66
69
|
};
|
|
67
|
-
// TODO is this needed?
|
|
68
|
-
// typedArrays.i32.fill(0);
|
|
69
70
|
|
|
70
71
|
for (const [name, value] of Object.entries(uniformValues)) {
|
|
71
72
|
const uniformLayout = this.layout[name];
|
|
@@ -101,7 +102,7 @@ export class UniformBufferLayout {
|
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
return new Uint8Array(arrayBuffer);
|
|
105
|
+
return new Uint8Array(arrayBuffer, 0, this.byteLength);
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
/** Does this layout have a field with specified name */
|
|
@@ -39,6 +39,7 @@ export class UniformStore<
|
|
|
39
39
|
keyof TPropGroups,
|
|
40
40
|
{
|
|
41
41
|
uniformTypes?: Record<string, VariableShaderType>;
|
|
42
|
+
uniformSizes?: Record<string, number>;
|
|
42
43
|
defaultProps?: Record<string, unknown>;
|
|
43
44
|
defaultUniforms?: Record<string, UniformValue>;
|
|
44
45
|
}
|
|
@@ -48,7 +49,10 @@ export class UniformStore<
|
|
|
48
49
|
const uniformBufferName = bufferName as keyof TPropGroups;
|
|
49
50
|
|
|
50
51
|
// Create a layout object to help us generate correctly formatted binary uniform buffers
|
|
51
|
-
const uniformBufferLayout = new UniformBufferLayout(
|
|
52
|
+
const uniformBufferLayout = new UniformBufferLayout(
|
|
53
|
+
block.uniformTypes ?? {},
|
|
54
|
+
block.uniformSizes ?? {}
|
|
55
|
+
);
|
|
52
56
|
this.uniformBufferLayouts.set(uniformBufferName, uniformBufferLayout);
|
|
53
57
|
|
|
54
58
|
// Create a Uniform block to store the uniforms for each buffer.
|