From 6e4250287358561ddf47ef8facee04180a26b0d9 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 10 Sep 2020 11:06:06 +0300 Subject: [PATCH] Support explicit padding in mesh vertices --- libs/gfx/include/psemek/gfx/mesh.hpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libs/gfx/include/psemek/gfx/mesh.hpp b/libs/gfx/include/psemek/gfx/mesh.hpp index 47522534..9bc167dc 100644 --- a/libs/gfx/include/psemek/gfx/mesh.hpp +++ b/libs/gfx/include/psemek/gfx/mesh.hpp @@ -19,9 +19,17 @@ namespace psemek::gfx struct normalized {}; + // skips a single attribute index struct skip {}; + // skips bytes in the vertex + template + struct padding + { + static constexpr std::size_t size = N; + }; + template struct attrib_traits; @@ -148,6 +156,14 @@ namespace psemek::gfx namespace detail { + template + struct is_padding : std::false_type + {}; + + template + struct is_padding> : std::true_type + {}; + template std::size_t attr_size() { @@ -155,6 +171,10 @@ namespace psemek::gfx { return 0; } + else if constexpr (is_padding::value) + { + return Attr::size; + } else { return sizeof(typename attrib_traits::attrib_type); @@ -192,6 +212,10 @@ namespace psemek::gfx { mesh_setup::setup_impl(index + 1, offset, stride); } + else if constexpr (is_padding::value) + { + mesh_setup::setup_impl(index, offset + Attr1::size, stride); + } else { using traits = attrib_traits;