From 723f59dffda4e688ea056ff54127982b8b84d27f Mon Sep 17 00:00:00 2001 From: vince Date: Sun, 5 Jan 2025 02:34:16 +0100 Subject: [PATCH] [Renderers/Web] treat RenderCommand.commandType as uint8_t instead of uint32_t (#162) --- examples/clay-official-website/index.html | 7 +++++-- renderers/web/canvas2d/clay-canvas2d-renderer.html | 4 +++- renderers/web/html/clay-html-renderer.html | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/examples/clay-official-website/index.html b/examples/clay-official-website/index.html index d9271a8..497f52a 100644 --- a/examples/clay-official-website/index.html +++ b/examples/clay-official-website/index.html @@ -426,7 +426,8 @@ element.style.height = Math.round(renderCommand.boundingBox.height.value) + 'px'; } - switch(renderCommand.commandType.value) { + // note: commandType is packed to uint8_t and has 3 garbage bytes of padding + switch(renderCommand.commandType.value & 0xff) { case (CLAY_RENDER_COMMAND_TYPE_NONE): { break; } @@ -580,7 +581,9 @@ for (let i = 0; i < length; i++, arrayOffset += renderCommandSize) { let renderCommand = readStructAtAddress(arrayOffset, renderCommandDefinition); let boundingBox = renderCommand.boundingBox; - switch(renderCommand.commandType.value) { + + // note: commandType is packed to uint8_t and has 3 garbage bytes of padding + switch(renderCommand.commandType.value & 0xff) { case (CLAY_RENDER_COMMAND_TYPE_NONE): { break; } diff --git a/renderers/web/canvas2d/clay-canvas2d-renderer.html b/renderers/web/canvas2d/clay-canvas2d-renderer.html index 7907121..76b12d5 100644 --- a/renderers/web/canvas2d/clay-canvas2d-renderer.html +++ b/renderers/web/canvas2d/clay-canvas2d-renderer.html @@ -317,7 +317,9 @@ for (let i = 0; i < length; i++, arrayOffset += renderCommandSize) { let renderCommand = readStructAtAddress(arrayOffset, renderCommandDefinition); let boundingBox = renderCommand.boundingBox; - switch(renderCommand.commandType.value) { + + // note: commandType is packed to uint8_t and has 3 garbage bytes of padding + switch(renderCommand.commandType.value & 0xff) { case (CLAY_RENDER_COMMAND_TYPE_NONE): { break; } diff --git a/renderers/web/html/clay-html-renderer.html b/renderers/web/html/clay-html-renderer.html index e853772..73b547c 100644 --- a/renderers/web/html/clay-html-renderer.html +++ b/renderers/web/html/clay-html-renderer.html @@ -336,7 +336,7 @@ let element = null; if (!elementCache[renderCommand.id.value]) { let elementType = 'div'; - switch (renderCommand.commandType.value) { + switch (renderCommand.commandType.value & 0xff) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { if (readStructAtAddress(renderCommand.config.value, rectangleConfigDefinition).link.length.value > 0) { elementType = 'a'; @@ -384,7 +384,8 @@ element.style.height = Math.round(renderCommand.boundingBox.height.value) + 'px'; } - switch(renderCommand.commandType.value) { + // note: commandType is packed to uint8_t and has 3 garbage bytes of padding + switch(renderCommand.commandType.value & 0xff) { case (CLAY_RENDER_COMMAND_TYPE_NONE): { break; }