From a4e08c0ceb88b86e0dc884848bdf212429750282 Mon Sep 17 00:00:00 2001 From: Rezmason Date: Mon, 8 Nov 2021 03:08:25 -0800 Subject: [PATCH] Refining gpu-uniforms warnings, which are now only emitted if requested. Hypothetically a user could call write() on the ArrayBuffer to update only some of its values. --- lib/gpu-uniforms.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/gpu-uniforms.js b/lib/gpu-uniforms.js index e996c36..56786d8 100644 --- a/lib/gpu-uniforms.js +++ b/lib/gpu-uniforms.js @@ -93,7 +93,7 @@ const getTypeData = (type, attributes, otherStructLayouts) => { .map((_) => innerTypeData.defaultValue()), }; } else { - console.warn(`Unsupported type: ${type}`); + console.warn(`Unrecognized type ${type}.`); return null; } }; @@ -165,19 +165,21 @@ const parseStructLayoutsFromShader = (wgsl) => { const makeDataForLayout = (structLayouts, layout) => Object.fromEntries(layout.fields.map((field) => [field.identifier, field.defaultValue()])); -const writeField = (allLayouts, field, value, views, byteOffset) => { +const writeField = (allLayouts, field, value, views, byteOffset, warnMissingFields) => { if (value == null) { - console.warn(`Property missing: ${field.identifier}`); + if (warnMissingFields) { + console.warn(`Property missing from data: ${field.identifier}`); + } return; } if (field.isArray) { const count = field.isFixedSize ? field.mult : value.length; for (let i = 0; i < field.mult; i++) { - writeField(allLayouts, field.innerTypeData, value[i], views, byteOffset + field.innerTypeData.byteOffset * i); + writeField(allLayouts, field.innerTypeData, value[i], views, byteOffset + field.innerTypeData.byteOffset * i, warnMissingFields); } } else if (field.isStruct) { for (const innerField of field.innerLayout.fields) { - writeField(allLayouts, innerField, value[innerField.identifier], views, byteOffset + field.byteOffset); + writeField(allLayouts, innerField, value[innerField.identifier], views, byteOffset + field.byteOffset, warnMissingFields); } } else { const view = views[field.baseType]; @@ -191,7 +193,7 @@ const makeGenerator = (layout, structLayouts) => { return Object.freeze({ minSize, create: () => makeDataForLayout(structLayouts, layout), - write: (object, destination) => { + write: (object, destination, warnMissingFields = false) => { destination ??= new ArrayBuffer(layout.sizeInBytes); // TODO: expand to support runtime-sized arrays, via the length of the array on the data object const views = { @@ -201,7 +203,7 @@ const makeGenerator = (layout, structLayouts) => { }; for (const field of layout.fields) { - writeField(structLayouts, field, object[field.identifier], views, 0); + writeField(structLayouts, field, object[field.identifier], views, 0, warnMissingFields); } return destination;