From ab2a6638c14b4eef045f9d927a57d3cf812efbc5 Mon Sep 17 00:00:00 2001 From: Gregg Tavares Date: Sat, 30 Dec 2023 21:53:55 -0800 Subject: [PATCH] return size = 0 if no unsigned array --- src/buffer-views.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/buffer-views.ts b/src/buffer-views.ts index 52a0e77..e5573ae 100644 --- a/src/buffer-views.ts +++ b/src/buffer-views.ts @@ -577,10 +577,16 @@ function getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(typeDef: TypeDefiniti const fields = asStructDef.fields; if (fields) { const lastField = Object.values(fields).pop()!; - return getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(lastField.type); + if (lastField.type.size === 0) { + return getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(lastField.type); + } } - throw new Error('no unsigned array element'); + return { + size: 0, + unalignedSize: 0, + align: 1, + }; } /** @@ -625,6 +631,7 @@ function getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(typeDef: TypeDefiniti * ``` * @param varDef A variable definition provided by @link {makeShaderDataDefinitions} * @returns the size, align, and unalignedSize in bytes of the unsized array element in this type definition. + * If there is no unsized array, size = 0. */ export function getSizeAndAlignmentOfUnsizedArrayElement(varDef: VariableDefinition | StructDefinition): {size: number, align: number} { const asVarDef = varDef as VariableDefinition;